<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Object3d_%28xfig_example%29</id>
	<title>Object3d (xfig example) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Object3d_%28xfig_example%29"/>
	<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;action=history"/>
	<updated>2026-05-17T14:35:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1548&amp;oldid=prev</id>
		<title>Obst at 09:21, 18 May 2018</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1548&amp;oldid=prev"/>
		<updated>2018-05-18T09:21:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:21, 18 May 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:SLxfig]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:SLxfig]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:object3d.png|300px]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Plotting in 3D =====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== Plotting in 3D =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Obst</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1532&amp;oldid=prev</id>
		<title>Obst: Obst moved page Object3d to Object3d (xfig example) without leaving a redirect</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1532&amp;oldid=prev"/>
		<updated>2018-05-17T13:31:40Z</updated>

		<summary type="html">&lt;p&gt;Obst moved page &lt;a href=&quot;/wiki/index.php?title=Object3d&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Object3d (page does not exist)&quot;&gt;Object3d&lt;/a&gt; to &lt;a href=&quot;/wiki/index.php/Object3d_(xfig_example)&quot; title=&quot;Object3d (xfig example)&quot;&gt;Object3d (xfig example)&lt;/a&gt; without leaving a redirect&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:31, 17 May 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Obst</name></author>
	</entry>
	<entry>
		<id>https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1410&amp;oldid=prev</id>
		<title>Sokolova-lapa: Created page with &quot;  Category:SLxfig  ===== Plotting in 3D ===== &lt;pre&gt; % -*- mode: slang; mode: fold -*- require(&quot;isisscripts&quot;); require(&quot;lbscripts&quot;); ()=evalfile(&quot;/home/falkner/work/lightbe...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.sternwarte.uni-erlangen.de/wiki/index.php?title=Object3d_(xfig_example)&amp;diff=1410&amp;oldid=prev"/>
		<updated>2018-05-02T11:19:17Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  &lt;a href=&quot;/wiki/index.php/Category:SLxfig&quot; title=&quot;Category:SLxfig&quot;&gt;Category:SLxfig&lt;/a&gt;  ===== Plotting in 3D ===== &amp;lt;pre&amp;gt; % -*- mode: slang; mode: fold -*- require(&amp;quot;isisscripts&amp;quot;); require(&amp;quot;lbscripts&amp;quot;); ()=evalfile(&amp;quot;/home/falkner/work/lightbe...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SLxfig]]&lt;br /&gt;
&lt;br /&gt;
===== Plotting in 3D =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% -*- mode: slang; mode: fold -*-&lt;br /&gt;
require(&amp;quot;isisscripts&amp;quot;);&lt;br /&gt;
require(&amp;quot;lbscripts&amp;quot;);&lt;br /&gt;
()=evalfile(&amp;quot;/home/falkner/work/lightbending/lbscripts.git/modules/ptrace.sl&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
%%%%% GLOBAL PARAMETER: =======================================================&lt;br /&gt;
&lt;br /&gt;
xfig_set_latex_preamble(&amp;quot;\renewcommand{\vec}[1]{\ensuremath{\mathbf{#1}}}&amp;quot;R);&lt;br /&gt;
&lt;br /&gt;
%%% CAMERA: modified Spherical angles&lt;br /&gt;
variable cam1 = 20*PI/180.; % cam1 = PI/2 -  thetaa&lt;br /&gt;
variable cam2 =  0*PI/180.; % cam2 = PI - phi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% LIGHT BENDING:&lt;br /&gt;
variable Mns = 1.44*2e30;&lt;br /&gt;
%variable Rns = 10e3; % Physical radius of the neutron star&lt;br /&gt;
variable rs = 2*Const_G*Mns/sqr(Const_c)*1e1; % Schwarzschild radius&lt;br /&gt;
variable r = 15e3; % radius of photon emission&lt;br /&gt;
variable u = rs/r;&lt;br /&gt;
&lt;br /&gt;
%%% GEOMETRY:&lt;br /&gt;
variable R = 1; % radius of the sphere [BUG HERE FOR R /= 1]&lt;br /&gt;
&lt;br /&gt;
variable i = 60*PI/180.; % Inclination of the observer&lt;br /&gt;
&lt;br /&gt;
variable theta =  45*PI/180.; % Spot position&lt;br /&gt;
variable phi   = 220*PI/180.; % Spot position&lt;br /&gt;
&lt;br /&gt;
%%% PLOT DIMENSION&lt;br /&gt;
variable size = 12;&lt;br /&gt;
variable xmin = -1.00*R;&lt;br /&gt;
variable xmax =  2.20*R;&lt;br /&gt;
variable ymin = -0.55*R;&lt;br /&gt;
variable ymax =  2.10*R;&lt;br /&gt;
&lt;br /&gt;
%%% PLOT COLORS&lt;br /&gt;
variable col_cbg = [&amp;quot;#88CCEE&amp;quot;,&lt;br /&gt;
		    &amp;quot;#999933&amp;quot;,&lt;br /&gt;
		    &amp;quot;#AA4499&amp;quot;,&lt;br /&gt;
		    &amp;quot;#332288&amp;quot;&lt;br /&gt;
		   ];&lt;br /&gt;
% variable photon1 = col_cbg[2];&lt;br /&gt;
% variable photon2 = col_cbg[3];&lt;br /&gt;
% variable obsplane = col_cbg[1];&lt;br /&gt;
variable photon1 = CB_COLOR_SCHEME[1];&lt;br /&gt;
variable photon2 = CB_COLOR_SCHEME[2];&lt;br /&gt;
variable obsplane = &amp;quot;#505050&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% PHYSIKAL VECTORS ==========================================================&lt;br /&gt;
&lt;br /&gt;
%%% CAMERA: Basis vectors&lt;br /&gt;
variable c1 = vector_rotate( vector(1,0,0), vector(1,0,0), cam1 );&lt;br /&gt;
variable c2 = vector_rotate( vector(0,1,0), vector(1,0,0), cam1 );&lt;br /&gt;
variable c3 = vector_rotate( vector(0,0,1), vector(1,0,0), cam1 );&lt;br /&gt;
c1 = vector_rotate( c1, vector(0,0,1), cam2 );&lt;br /&gt;
c2 = vector_rotate( c2, vector(0,0,1), cam2 );&lt;br /&gt;
c3 = vector_rotate( c3, vector(0,0,1), cam2 );&lt;br /&gt;
&lt;br /&gt;
%%% AXIS&lt;br /&gt;
variable ex = vector( R, 0, 0 );&lt;br /&gt;
variable ey = vector( 0, R, 0 );&lt;br /&gt;
variable ez = vector( 0, 0, R );&lt;br /&gt;
&lt;br /&gt;
%%% OBSERVER&lt;br /&gt;
variable k = vector( sin(i), 0, cos(i) );&lt;br /&gt;
%%% SPOT&lt;br /&gt;
variable n  = vector( 1, phi, theta ; sph );&lt;br /&gt;
&lt;br /&gt;
%%% LIGHT BENDING CALCULATIONS&lt;br /&gt;
%%% Attention: simple calculations based on beloborodov 2002, i.e., it&lt;br /&gt;
%%% does not work for all settings (where alpha &amp;gt; 90°)&lt;br /&gt;
&lt;br /&gt;
variable lbpar = struct{&lt;br /&gt;
  nmr = 10,&lt;br /&gt;
  nma = 100,&lt;br /&gt;
  rmin = 0.95*r/rs,&lt;br /&gt;
  rmax = 1.05*r/rs,&lt;br /&gt;
  lbmeth = &amp;quot;belob&amp;quot;,&lt;br /&gt;
  tdelay=0,&lt;br /&gt;
};&lt;br /&gt;
variable lbmap = lb_psir2b_map( lbpar );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Solution 1:&lt;br /&gt;
variable psi   = acos( dotprod(k,n) ); &lt;br /&gt;
variable alpha = acos( 1 - ( 1-cos(psi) )*( 1-u ) );&lt;br /&gt;
alpha = lb_interp( lbmap, r/rs, psi, struct{ a, b } ).a;&lt;br /&gt;
&lt;br /&gt;
variable b     = R*sin(alpha)/sqrt(1-u);&lt;br /&gt;
b = lb_interp( lbmap, r/rs, psi, struct{ a, b } ).b*rs/r*R;&lt;br /&gt;
&lt;br /&gt;
variable crho  = ( ( k^(n^k) ) * ey )/abs( k^(n^k) );&lt;br /&gt;
variable srho  = abs( ( k^(n^k) ) ^ ey )/abs( k^(n^k) );&lt;br /&gt;
&lt;br /&gt;
variable k0 = unit_vector(vector_rotate( n, crossprod(n,k), alpha ));&lt;br /&gt;
&lt;br /&gt;
%% Solution 2:&lt;br /&gt;
%%   1 - cos(alpha) = ( 1 - cos(psi) )*(1-u)&lt;br /&gt;
%%   b = R*sin(alpha) / sqrt(1-u)&lt;br /&gt;
variable _psi   = 2*PI - psi;&lt;br /&gt;
variable _alpha = acos( 1 - ( 1-cos(_psi) )*( 1-u ) );;&lt;br /&gt;
_alpha = lb_interp( lbmap, r/rs, _psi, struct{ a, b } ).a;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
variable fac = rs/r*R;&lt;br /&gt;
variable _b     = R*sin(_alpha)/sqrt(1-u);&lt;br /&gt;
_b = lb_interp( lbmap, r/rs, _psi, struct{ a, b } ).b*fac;&lt;br /&gt;
variable _rp = lb_p_b( _b/fac )*fac;&lt;br /&gt;
variable _pp = lb_psiper_u_belob_( fac/_rp );&lt;br /&gt;
&lt;br /&gt;
variable _k0 = unit_vector(vector_rotate( n, crossprod(n,k), -_alpha ));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% FUNCTIONS =================================================================&lt;br /&gt;
%%% Must be defined here, as functions require some global variables!&lt;br /&gt;
&lt;br /&gt;
% Projection of vectors onto the camera plane&lt;br /&gt;
define P( v ){ %{{{&lt;br /&gt;
  variable vec = @v;&lt;br /&gt;
  if( typeof(vec)== Array_Type ){&lt;br /&gt;
    vec = struct_array_2_struct_of_arrays( v );&lt;br /&gt;
  }&lt;br /&gt;
  variable pro = vector_change_basis( vec, c1, c2, c3 );&lt;br /&gt;
  return pro;&lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
% Return x,z component of Projection&lt;br /&gt;
define PP( v ){ %{{{&lt;br /&gt;
  variable p = P(v);&lt;br /&gt;
  return p.x, p.z;&lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
% GREAT CIRCLE between 2 Vector&lt;br /&gt;
define GC( a, b ){ %{{{&lt;br /&gt;
  &lt;br /&gt;
  variable N = qualifier(&amp;quot;N&amp;quot;,100);&lt;br /&gt;
  variable R = qualifier_exists(&amp;quot;R&amp;quot;)? 1:0;&lt;br /&gt;
  &lt;br /&gt;
  variable na = unit_vector(a);&lt;br /&gt;
  variable nb = unit_vector(b);&lt;br /&gt;
&lt;br /&gt;
  variable rotangle = [0:acos(dotprod(na,nb))-R*2*PI:#N];&lt;br /&gt;
  variable rotvec   = unit_vector( crossprod( a, b ) );&lt;br /&gt;
&lt;br /&gt;
  variable gc = vector_rotate( na, rotvec, rotangle );&lt;br /&gt;
&lt;br /&gt;
  return gc;&lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
% PHOTON TRAJECTORY&lt;br /&gt;
define T(p){ %{{{&lt;br /&gt;
  variable B = b/R*r;&lt;br /&gt;
  variable X = rs*( 1 - cos(p))/(2*( 1 + cos(p)));&lt;br /&gt;
  variable trace = sqrt( sqr(X) + sqr(B/sin(p)) ) - X;&lt;br /&gt;
  return trace/r*R;&lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
define PT(){ %{{{&lt;br /&gt;
  variable brs = b/R*r/rs;&lt;br /&gt;
  variable pt = lb_ptrace_belob( brs ; n=N, pmax=psi );&lt;br /&gt;
  &lt;br /&gt;
  variable v = vector( pt.r*rs/r*R, [0:0:#N], -pt.p ; sph );&lt;br /&gt;
  v = vector_rotate( v, ey, i );&lt;br /&gt;
  v = vector_rotate( v, k, -atan2(crho,srho) );&lt;br /&gt;
&lt;br /&gt;
  return v;  &lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
define _PT(){ %{{{&lt;br /&gt;
  variable brs = _b/R*r/rs;&lt;br /&gt;
&lt;br /&gt;
  variable pt = lb_ptrace_belob( brs ; n=N, pmax=2*PI-psi );&lt;br /&gt;
  &lt;br /&gt;
  variable v = vector( pt.r*rs/r*R, [0:0:#N], -pt.p ; sph );&lt;br /&gt;
  v = vector_rotate( v, ey, i );&lt;br /&gt;
  v = vector_rotate( v, k, PI-atan2(crho,srho) );&lt;br /&gt;
&lt;br /&gt;
  return v;  &lt;br /&gt;
}&lt;br /&gt;
%}}}&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% PREPARE PLOT ==============================================================&lt;br /&gt;
variable s = 1.5;&lt;br /&gt;
variable ls= s*1.06;&lt;br /&gt;
variable N = 300;&lt;br /&gt;
&lt;br /&gt;
% arrow head&lt;br /&gt;
variable ARROW = xfig_create_arrow(;arrow_type=2,&lt;br /&gt;
				   arrow_style=1,&lt;br /&gt;
				   arrow_width=8,&lt;br /&gt;
				   arrow_heigth=64,&lt;br /&gt;
				   arrow_thickness=2&lt;br /&gt;
				  );&lt;br /&gt;
variable AXIS = @ARROW;&lt;br /&gt;
AXIS.arrow_style=0;&lt;br /&gt;
AXIS.arrow_type=0;&lt;br /&gt;
&lt;br /&gt;
% circle&lt;br /&gt;
variable xycirc = vector( [R:R:#N], [0:2*PI:#N], [PI/2.:PI/2.:#N]; sph );&lt;br /&gt;
variable xzcircn = vector( [R:R:#N], [0:0:#N], PI/2.*[-1:1:#N]; sph );&lt;br /&gt;
variable xzcircs = vector( [R:R:#N], [0:0:#N], PI/2.*[1:3:#N]; sph );&lt;br /&gt;
&lt;br /&gt;
% n help lines&lt;br /&gt;
variable ncirc  = vector( [R:R:#N], [phi:phi:#N], [0:PI/2:#N]; sph );&lt;br /&gt;
variable nline  = vector( [0:R:#N], [phi:phi:#N], [PI/2:PI/2:#N];sph);&lt;br /&gt;
&lt;br /&gt;
% kn circ&lt;br /&gt;
variable kncirc = R*GC( unit_vector(n), unit_vector(k) );&lt;br /&gt;
variable nkcirc = R*GC( unit_vector(n), unit_vector(k) ; R );&lt;br /&gt;
&lt;br /&gt;
%%% PLOT ======================================================================&lt;br /&gt;
variable xp = xfig_plot_new(size,(ymax-ymin)/(xmax-xmin)*size);&lt;br /&gt;
xp.world( xmin, xmax, ymin, ymax ; padx=0.0, pady=0.0 );&lt;br /&gt;
xp.axis(;off);&lt;br /&gt;
&lt;br /&gt;
% axis&lt;br /&gt;
xp.plot( PP([0,s]*R*ex); forward_arrow=AXIS );&lt;br /&gt;
xp.xylabel( PP(ls*R*ex), &amp;quot;$x$&amp;quot;R  );&lt;br /&gt;
&lt;br /&gt;
xp.plot( PP([0,s]*ey) );&lt;br /&gt;
%xp.xylabel( PP(ls*ey), &amp;quot;$y$&amp;quot;R  );&lt;br /&gt;
&lt;br /&gt;
xp.plot( PP([0,s]*R*ez); forward_arrow=AXIS );&lt;br /&gt;
xp.xylabel( PP(ls*ez), &amp;quot;$z$&amp;quot;R  );&lt;br /&gt;
&lt;br /&gt;
% circles&lt;br /&gt;
xp.plot( PP(xzcircn) ; line=0, width=2 );&lt;br /&gt;
xp.plot( PP(xzcircs) ; line=0, width=2 );&lt;br /&gt;
xp.plot( PP(xycirc)  ; line=0, width=2 );&lt;br /&gt;
&lt;br /&gt;
% rotation&lt;br /&gt;
variable rot = 0.8*s*R*ez+vector( 0.15*[R:R:#N], PI/180*[-60:265:#N], [PI/2.:PI/2.:#N]; sph );&lt;br /&gt;
xp.plot( PP(rot); forward_arrow=AXIS );&lt;br /&gt;
&lt;br /&gt;
% observer&lt;br /&gt;
xp.plot( PP([0,1]*R*k) ; line=1 );&lt;br /&gt;
xp.plot( PP([1,s]*R*k) ; line=0 );&lt;br /&gt;
xp.xylabel( PP(ls*k), &amp;quot;$\vec{k}$&amp;quot;R, 1.5, 1.5 );&lt;br /&gt;
xp.plot( PP([1,s]*R*k); forward_arrow=ARROW );&lt;br /&gt;
&lt;br /&gt;
% observer plane&lt;br /&gt;
variable deltap = 1.8*R;&lt;br /&gt;
variable oplane = 1.2*R*vector( [-1, 1, 1,-1,-1],&lt;br /&gt;
			  [-1,-1, 1, 1,-1],&lt;br /&gt;
			  [ 0, 0, 0, 0, 0]&lt;br /&gt;
			);&lt;br /&gt;
oplane.z += deltap;&lt;br /&gt;
oplane = vector_rotate( oplane, ey, i );&lt;br /&gt;
xp.plot( PP(oplane); depth=40, width=3, color=obsplane );&lt;br /&gt;
%variable oplab = 1.8*R*vector( -.01, -.95, 0 );&lt;br /&gt;
variable oplab = 1.8*R*vector( .60, 0, 0 );&lt;br /&gt;
oplab.z += deltap;&lt;br /&gt;
oplab = vector_rotate( oplab, ey, i );&lt;br /&gt;
%xp.xylabel( PP(oplab), &amp;quot;observer plane&amp;quot;R ; rotate=-0.97*i*180/PI, color=obsplane  );&lt;br /&gt;
xp.xylabel( PP(oplab), &amp;quot;{\footnotesize observer plane}&amp;quot;R ; rotate=90, color=obsplane  );&lt;br /&gt;
variable ocirc = vector( [R:R:#N],[0:2*PI:#N],PI/2.*[1:1:#N]; sph );&lt;br /&gt;
ocirc.z += deltap;&lt;br /&gt;
ocirc = vector_rotate( ocirc, ey, i );&lt;br /&gt;
xp.plot( PP(ocirc); color=obsplane );&lt;br /&gt;
variable A = 1.15*s*R*vector( [0,0],[0,1],[0,0] );&lt;br /&gt;
A.z += deltap;&lt;br /&gt;
A = vector_rotate( A, ey, i );&lt;br /&gt;
xp.plot( PP(A) ; forward_arrow=AXIS, color=obsplane );&lt;br /&gt;
xp.xylabel( PP(struct_of_arrays_2_struct_array(A)[-1]), &amp;quot;$A$&amp;quot;R, -.5, 1.2;color=obsplane);&lt;br /&gt;
variable B = s*R*vector( [0,-1],[0,0],[0,0] );&lt;br /&gt;
B.z += deltap;&lt;br /&gt;
B = vector_rotate( B, ey, i );&lt;br /&gt;
xp.plot( PP(B) ; forward_arrow=AXIS,color=obsplane );&lt;br /&gt;
xp.xylabel( PP(struct_of_arrays_2_struct_array(B)[-1]), &amp;quot;$B$&amp;quot;R, -.4, 2.2;color=obsplane );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
%%% IMPACT A &amp;amp; B&lt;br /&gt;
%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
% Line in OP from center to impact point 1&lt;br /&gt;
variable IB = b*vector( [0,1], PI/2+[0,PI/2-atan2(crho,srho)], PI/2*[1,1] ; sph );&lt;br /&gt;
variable IB2 = @IB;&lt;br /&gt;
IB.z += deltap;&lt;br /&gt;
IB = vector_rotate( IB, ey, i );&lt;br /&gt;
xp.plot( PP(IB) ; line=1,color=obsplane );&lt;br /&gt;
% Projected circle at the impact point 1&lt;br /&gt;
variable IBcirc = vector( 0.05*[R:R:#N],[0:2*PI:#N],PI/2.*[1:1:#N]; sph );&lt;br /&gt;
IBcirc.z += deltap;&lt;br /&gt;
IBcirc = vector_rotate( IBcirc, ey, i );&lt;br /&gt;
IBcirc += struct_of_arrays_2_struct_array(IB)[-1] - struct_of_arrays_2_struct_array(IB)[0];&lt;br /&gt;
IBcirc = struct_of_arrays_2_struct_array(IBcirc);&lt;br /&gt;
%xp.shade_region( PP(IBcirc) ; fillcolor=photon1,width=0);&lt;br /&gt;
xp.plot( PP(struct_of_arrays_2_struct_array(IB)[-1]) ; sym=&amp;quot;circle&amp;quot;, color=photon1,fill, size=0.3*R);&lt;br /&gt;
&lt;br /&gt;
% Arrow between k and photon1 tratecory indicating b&lt;br /&gt;
IB2.z += 0.7*deltap;&lt;br /&gt;
IB2 = vector_rotate( IB2, ey, i );&lt;br /&gt;
xp.plot( PP(IB2) ; line=0 , forward_arrow, backward_arrow, depth=150 );&lt;br /&gt;
xp.xylabel( PP(vector( mean(IB2.x), mean(IB2.y), mean(IB2.z) )), &amp;quot;$b$&amp;quot;R, -.4, -.4 );&lt;br /&gt;
&lt;br /&gt;
% Line in OP from center to impact point 2&lt;br /&gt;
variable _IB = -_b*vector( [0,1], PI/2+[0,PI/2-atan2(crho,srho)], PI/2*[1,1] ; sph );&lt;br /&gt;
_IB.z += deltap;&lt;br /&gt;
_IB = vector_rotate( _IB, ey, i );&lt;br /&gt;
xp.plot( PP(_IB) ; line=1,color=obsplane );&lt;br /&gt;
% Projected circle at the impact point 1&lt;br /&gt;
variable _IBcirc = vector( 0.05*[R:R:#N],[0:2*PI:#N],PI/2.*[1:1:#N]; sph );&lt;br /&gt;
_IBcirc.z += deltap;&lt;br /&gt;
_IBcirc = vector_rotate( _IBcirc, ey, i );&lt;br /&gt;
_IBcirc += struct_of_arrays_2_struct_array(_IB)[-1] - struct_of_arrays_2_struct_array(_IB)[0];&lt;br /&gt;
_IBcirc = struct_of_arrays_2_struct_array(_IBcirc);&lt;br /&gt;
%xp.shade_region( PP(_IBcirc) ; fillcolor=photon2,width=0);&lt;br /&gt;
xp.plot( PP(struct_of_arrays_2_struct_array(_IB)[-1]) ; sym=&amp;quot;circle&amp;quot;, color=photon2,fill, size=0.3*R);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% RHO&lt;br /&gt;
variable rhoc = 0.3*R*vector( [1:1:#N], PI/2+[0:PI/2-atan2(crho,srho):#N], PI/2*[1:1:#N] ; sph );&lt;br /&gt;
rhoc.z += deltap;&lt;br /&gt;
rhoc = vector_rotate( rhoc, ey, i );&lt;br /&gt;
xp.plot( PP(rhoc) ; line=0,color=obsplane );&lt;br /&gt;
xp.xylabel( PP(vector( mean(rhoc.x), mean(rhoc.y), mean(rhoc.z) )), &amp;quot;$\rho$&amp;quot;R, -.4, -.8;color=obsplane );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
xp.plot( PP([R,deltap]*k) ; line=2, width=1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% inclination&lt;br /&gt;
variable ic = GC( ez, k );&lt;br /&gt;
xp.plot( PP(0.18*ic) );&lt;br /&gt;
xp.xylabel( PP(0.12*vector( mean(ic.x), mean(ic.y), mean(ic.z) )), &amp;quot;$i$&amp;quot;R );&lt;br /&gt;
&lt;br /&gt;
% PSI&lt;br /&gt;
variable pc = GC( n, k );&lt;br /&gt;
xp.plot( PP(0.42*pc) ; color=photon1, depth=50);&lt;br /&gt;
xp.xylabel( PP(0.35*vector( mean(pc.x), mean(pc.y), mean(pc.z) )), &amp;quot;$\varPsi$&amp;quot;R, -.5, 0; color=photon1 );&lt;br /&gt;
&lt;br /&gt;
variable _pc = GC( n, k ; R);&lt;br /&gt;
xp.plot( PP(0.33*_pc) ; color=photon2, depth=150 );&lt;br /&gt;
xp.xylabel( PP(1.*vector( mean(_pc.x), mean(_pc.y), mean(_pc.z) )), &amp;quot;$\varPsi^*$&amp;quot;R, -1.8, 0 ; color=photon2);&lt;br /&gt;
&lt;br /&gt;
% Periastron&lt;br /&gt;
variable _per = _rp*vector_rotate( unit_vector(n), crossprod(k,n), _psi-_pp ); &lt;br /&gt;
variable _pper = GC( _per, k);&lt;br /&gt;
xp.plot( PP([0,1]*_per) ; color=photon2 );&lt;br /&gt;
xp.xylabel( PP(0.6*_per), &amp;quot;$r_\mathrm{p}$&amp;quot;R, .7, .0 ; color=photon2);&lt;br /&gt;
xp.plot( PP(0.29*_pper) ; color=photon2, depth=150 );&lt;br /&gt;
xp.xylabel( PP(0.25*vector( mean(_pper.x), mean(_pper.y), mean(_pper.z) )), &amp;quot;$\varPsi_\mathrm{p}$&amp;quot;R, .25, .0 ; color=photon2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% Emission point: R, n &amp;amp; help lines&lt;br /&gt;
xp.plot( PP([0,1]*R*n) ; line=1 );&lt;br /&gt;
xp.xylabel( PP(0.5*R*n), &amp;quot;$R$&amp;quot;R, .5, .5 );&lt;br /&gt;
xp.plot( PP([1,1.2*s]*R*n) );&lt;br /&gt;
xp.xylabel( PP(1.2*ls*R*n), &amp;quot;$\vec{n}$&amp;quot;R, -1,0 );&lt;br /&gt;
xp.plot( PP([1,1.2*s]*R*n); forward_arrow=ARROW );&lt;br /&gt;
&lt;br /&gt;
xp.plot( PP(ncirc) ; line=2 );&lt;br /&gt;
xp.plot( PP(nline) ; line=2 );&lt;br /&gt;
xp.plot( PP(kncirc); line=1 );&lt;br /&gt;
xp.plot( PP(nkcirc); line=1 );&lt;br /&gt;
&lt;br /&gt;
variable Scirc = vector( 0.05*[R:R:#N],[0:2*PI:#N],PI/2.*[1:1:#N]; sph );&lt;br /&gt;
Scirc.z += R;&lt;br /&gt;
Scirc = vector_rotate( Scirc, unit_vector(crossprod(ez,n)), theta );&lt;br /&gt;
Scirc = struct_of_arrays_2_struct_array(Scirc);&lt;br /&gt;
%xp.shade_region( PP(Scirc) ; fillcolor=&amp;quot;black&amp;quot;,width=0);&lt;br /&gt;
xp.plot( PP(R*n)  ; sym=&amp;quot;circle&amp;quot;, fill, size=0.3*R, depth=40 );&lt;br /&gt;
&lt;br /&gt;
% phi&lt;br /&gt;
variable phic = vector( 0.13*[R:R:#N], [0:phi:#N], [PI/2.:PI/2:#N]; sph );&lt;br /&gt;
xp.plot( PP(phic) );&lt;br /&gt;
xp.xylabel( PP(vector( mean(phic.x), mean(phic.y), mean(phic.z) )), &amp;quot;$\phi$&amp;quot;R, 1.2, -.1 );&lt;br /&gt;
&lt;br /&gt;
% theta&lt;br /&gt;
variable tc = vector( 0.6*[R:R:#N], [phi:phi:#N], [0:theta:#N]; sph );&lt;br /&gt;
xp.plot( PP(tc) );&lt;br /&gt;
xp.xylabel( PP(0.8*vector( mean(tc.x), mean(tc.y), mean(tc.z) )), &amp;quot;$\theta$&amp;quot;R, -.1,-.5 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% photon&lt;br /&gt;
xp.plot( PP(R*[n,n+(s-1)*k0]) ; line=0 , depth=40);&lt;br /&gt;
xp.xylabel( PP(R*(n+(ls-1)*k0)), &amp;quot;$\vec{k}_0$&amp;quot;R, 1.6, .6; depth=40 );&lt;br /&gt;
xp.plot( PP(R*[n,n+(s-1)*k0]); forward_arrow=ARROW, depth=40);&lt;br /&gt;
&lt;br /&gt;
% alpha&lt;br /&gt;
variable ac = GC( k0, n );&lt;br /&gt;
xp.plot( PP(0.2*ac+R*n) );&lt;br /&gt;
xp.xylabel( PP(R*n+0.13*vector( mean(ac.x), mean(ac.y), mean(ac.z) )), &amp;quot;$\alpha$&amp;quot;R );&lt;br /&gt;
&lt;br /&gt;
% trace&lt;br /&gt;
variable t1 = PT();&lt;br /&gt;
variable t1ind = where( vector_norm(t1) &amp;lt;= abs(vector(IB.x[-1],IB.y[-1],IB.z[-1])) );&lt;br /&gt;
xp.plot( PP(struct_filter( t1, t1ind ; copy ) ) ; color=photon1, depth=50, width=3 );&lt;br /&gt;
xp.plot( PP(struct_filter( t1, complement([0:length(t1ind)-1],t1ind) ; copy )); color=photon1, depth=30, line=1 );&lt;br /&gt;
variable t2 = _PT();&lt;br /&gt;
variable t2ind = where( vector_norm(t2) &amp;lt;= abs(vector(_IB.x[-1],_IB.y[-1],_IB.z[-1])) );&lt;br /&gt;
xp.plot( PP(struct_filter( t2, t2ind ; copy ) ) ; color=photon2, line=1,depth=250, width=3 );&lt;br /&gt;
xp.plot( PP(struct_filter( t2, complement([0:length(t2ind)-1],t2ind) ; copy ) ); color=photon2, depth=30, line=1 );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%%% FILL OBSERVER PLANE&lt;br /&gt;
variable fill1 = vector([kncirc.x,IB.x[[0,1]],struct_filter( t1, t1ind ; copy ).x],&lt;br /&gt;
			[kncirc.y,IB.y[[0,1]],struct_filter( t1, t1ind ; copy ).y],&lt;br /&gt;
			[kncirc.z,IB.z[[0,1]],struct_filter( t1, t1ind ; copy ).z]&lt;br /&gt;
		       );&lt;br /&gt;
variable _fill1 = vector([0,IB.x[[0,1]],struct_filter( t1, t1ind ; copy ).x],&lt;br /&gt;
			 [0,IB.y[[0,1]],struct_filter( t1, t1ind ; copy ).y],&lt;br /&gt;
			 [0,IB.z[[0,1]],struct_filter( t1, t1ind ; copy ).z]&lt;br /&gt;
			);&lt;br /&gt;
variable fill2 = vector([nkcirc.x,_IB.x[[0,1]],struct_filter( t2, t2ind ; copy ).x],&lt;br /&gt;
			[nkcirc.y,_IB.y[[0,1]],struct_filter( t2, t2ind ; copy ).y],&lt;br /&gt;
			[nkcirc.z,_IB.z[[0,1]],struct_filter( t2, t2ind ; copy ).z]&lt;br /&gt;
		       );&lt;br /&gt;
variable _fill2 = vector([0,_IB.x[[0,1]],struct_filter( t2, t2ind ; copy ).x],&lt;br /&gt;
			 [0,_IB.y[[0,1]],struct_filter( t2, t2ind ; copy ).y],&lt;br /&gt;
			 [0,_IB.z[[0,1]],struct_filter( t2, t2ind ; copy ).z]&lt;br /&gt;
			);&lt;br /&gt;
xp.shade_region( PP(_fill1); fillcolor=photon1, fill=36,depth=250, width=0 );&lt;br /&gt;
xp.shade_region( PP(_fill2); fillcolor=photon2, fill=36,depth=250, width=0 );&lt;br /&gt;
		  &lt;br /&gt;
&lt;br /&gt;
xp.render(&amp;quot;geo.pdf&amp;quot;);&lt;br /&gt;
xp.render(&amp;quot;geo.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sokolova-lapa</name></author>
	</entry>
</feed>