<<

#418 ; Ni forte ataku la metodon "Skew-Ray Trace"

>>

En malnova artikolo #401 mi provis unue mane pritrakti iom da enhavo de grava libro "Telescope Optics, Evaluation and Design" pri (hobia) astronomia teleskopa optiko, sed sen granda sukceso. Nature mi devos korektigi la tekston. Nun mi atakos denove kun pli bona laborilo kaj mi finfine subigos la iom malfacilajn problemojn de geometria optiko per la libere havebla forta komputila programo "GNU Octave".

En norma lerneja fiziko oni ĝenerale supozas ke la lumo refraktus en la meza ebeno de lenso. Tio tamen ne estas la preciza vero. Lerneja fiziko ofte estas deprime neakurata en praktiko. Lumo fakte refraktas en optikaj limaj surfacoj. Certe estas pli facile por kalkuli mane kie la lumo trafus la teorian mezan ebenon de lenso. Por kalkuli la trafan punkton sur kurba surfaco, eble eĉ en por optika akso oblikva lumo, oni tamen bezonas komputilon, bonan metodon kaj facile uzeblan programon.

Vikipedio proponas afable bazan informon Esperante pri la fizikaj fenomenoj refrakto kaj reflekto de lumo.

Miaopinie mi jam relative bone kapablas kalkuli optikon de unu sfera spegulo per vektoroj, kiel en antaŭaj artikoloj. Reflektoj estas relative simplaj kaj en spegulo estas nur unu optika lima surfaco. Lensoj tamen estas iom pli malfacilaj, eĉ simplaj sferaj lensoj, kiojn mi provizore pensas. Lenso havas du optikaj surfacoj kaj por ĉiu lenso oni do devas kalkuli refrakton de lumo el du optikaj surfacoj. Provizore mi ne scias kiel bone kalkuli refrakton per vektoroj. Mi do uzu la metodon de la libro.

La libro uzas "direction cosines" por priskribi la vojon de lumradio. Mi fakte provizore ne komprenas la metodon de libro detale, sed mi kredas ke mi tamen jam iom-post-iom lernis por ĝin uzi. Eraroj mi faris antaŭe kaj mi provas nun ilin korektigi.

Apude estas simplaj 2-dimensiaj desegnaĵoj por klarigi la taskojn. La problemo tamen fakte estas 3-dimensia. La Z-koordinato estas direktita dekstren. La lumradio veturas el maldekstra flanko dekstren. La direkto dekstren estas pozitiva.

La lumradio startas el koordinatoj (X0, Y0, Z0) kaj la originaj "direction cosines" estas (l0, m0, n0) en la sama ordo. Unue ni laboras kun la unua optika surfaco kie la en aero fluganta lumradio trafas la vitron de lenso en koordinatoj (Xs, Ys, Zs) kaj post refrakto en la surfaco la direkto de lumo en la vitro estos (ls, ms, ns).

Notu ke unue la distanco inter la starta punkto de lumo kaj la lenso estas nomita d kaj la radiuso r (radiuso de kurbeco por la unua surfaco de sfera lenso) de unua lensa surfaco estas pozitiva. La lumo veturas el n = 1 de aero al n' de vitro.

Sekve ni ataku la duan optikan surfacon de lenso. Unue ni tamen donas novaj nomoj por la antaŭaj rezultoj. Malnovaj valuoj (Xs, Ys, Zs) kaj (ls, ms, ns) estos novaj startaj valuoj (X0, Y0, Z0) kaj (l0, m0, n0)

Mi unue erare supozis ke la valuo d por la kalkulo de dua optika surfaco estus la tuta dikeco de lenso. Tion eraron mi volas nun korektigi. La korektita bildo dekstre montras la veran longon de d kaj tion ni bezonas por kalkuli la trafan punkton sur la dua optika surfaco de lenso. La valuo d do egalas dikeco - "sagitta" ĉe la unua optika surfaco.

Notu ke la radiuso r (la kurbeco) estas negativa por la dua surfaco. La centro de kurbeco por la dua sfera surfaco nome estas maldekstren. Direkto dekstren estas pozitiva kaj direkto maldekstren estas negativa.

Ni kalkulas denove kie la lumradio trafas la optikan surfacon, sed nun la lumo veturas el vitro al aero (el n' de vitro al n de aero). La novaj rezultoj por la dua surfaco estas (Xs, Ys, Zs) kaj (ls, ms, ns)

Sekve estas miaopinie pli bone por kontinui uzante vektoroj por trovi kie la lumradio trafos ion aŭ kie ĝi tranĉos ion alian lumradion. Ni ja ne scias kiom longa estas la vojo al la sekvanta grava punkto.

Mi skribis por programo "GNU Octave" funkcion kion oni uzu du fojoj por trovi iom da rezultoj por unu lenso, por du surfacoj.

% por datumo sfera.m
%
function rezulto = sfera (X, v, r, d, mus)

  X0 = X(1);
  Y0 = X(2);
  Z0 = X(3);
  
  l0 = v(1);
  m0 = v(2);
  n0 = v(3);
  
  t0 = Z0 - d;
  Zr = t0 - r;
  A = r^2 - X0^2 - Y0^2 - Zr^2;
  B = l0*X0 + m0*Y0 + n0*Zr;
  sAB2 = sqrt(A + B^2);
  C = B + sAB2 * r / abs(r);
  
  % Novaj koordinatoj
  Xs = X0 - C*l0;
  Ys = Y0 - C*m0;
  Zs = t0 - C*n0;
  
  Ci = sAB2 / abs(r);
  Cr = sqrt( mus^2 * (Ci^2 - 1) + 1 );
  P = Cr - mus*Ci;
  Pr = P / r;
  
  % Novaj "direction cosines"
  ls = mus*l0 - Pr*Xs;
  ms = mus*m0 - Pr*Ys;
  ns = mus*n0 - Pr*(Zs - r);

  % Pli bone normigi la vektoron al longo 1?
  longo = sqrt(ls^2 + ms^2 + ns^2);
  ls = ls / longo;
  ms = ms / longo;
  ns = ns / longo;
  
  rezulto = [ Xs Ys Zs ls ms ns ];

endfunction

Ni tamen notu ke la rezultaj koordinatoj de supra metodo estas iom strangaj. Ni eble povus imagi ke se la koordinatoj komencis el nulo, estus la unua Z-koordinato de rezulto iom pli ol valuo d? Tio tamen tute ne pravas. La Z-koordinato de unua rezulto nome estas relative al la komenco de lenso ĉe la optika akso.

Se ni volas sekvi la flugon de lumo en spaco en unu kaj sama koordinataro, estas la unua rezulto en Z-direkto Z0 + d + Zs (kie la valuo d unue estas la distanco el komenca punkto al lenso).

La dua rezulto en Z-direkto estis por mi unue iom malfacila por kompreni. Unue mi pensis ke la nova valuo d estus simple la dikeco de lenso. Oni tamen devas ankaŭ observi la valuon de "sagitta" el la rezulto por la unua optika surfaco. Tial la Z-koordinato kresku el la valuo de unua surfaco plie nur per la valuo dikeco - sagitta + Zs .

Jen simpla ekzemplo kiel oni povas uzi la supran funkcion kaj kiel oni kalkulu la Z-koordinaton (la aktuala valuo de Z-koordinato estas nunZ ) :

% Skew Ray Trace
% Spherical surface

clc
format short

% Koordinatoj de lumradio en komenco
X0 = 10;
Y0 = 20;
Z0 = 0;
% Estu horizontala lumradio
l0 = 0;
m0 = 0;
n0 = 1;

d = 50;         % Distanco al lenso en milimetroj
r = 100;        % Radiuso de kurbeco en milimetroj

naero = 1.0;                % Pli akurate 1.00029
nvitro = 1.5;
mus = naero / nvitro;       % Por direkto el aero al vitro

X = [ X0 Y0 Z0 ];
v = [ l0 m0 n0 ];
[ X v ]                % Montras la komencajn valuojn

nunZ = Z0       % La origina valuo de Z-koordinato

% Unua optika surfaco
resulto = sfera (X, v, r, d, mus)

Xs = resulto(1);
Ys = resulto(2);
Zs = resulto(3);
ls = resulto(4);
ms = resulto(5);
ns = resulto(6);

nunZ = nunZ + d + Zs     % La Z-koordinato por la unua surfaco

sagito = Zs              % La sagitta por la unua surfaco

% Sekve ni kalkulu por la dua optika surfaco

X0 = Xs;
Y0 = Ys;
Z0 = Zs;
l0 = ls;
m0 = ms;
n0 = ns;

r = -100;              % negativa kurbeco!
dikeco = 10;           % Tuta dikeco de lenso
d = dikeco - sagito; 
mus = 1 / mus;         % por alia direkto, el vitro al aero

X = [ X0 Y0 Z0 ];
v = [ l0 m0 n0 ];

resulto = sfera (X, v, r, d, mus)

Xs = resulto(1);
Ys = resulto(2);
Zs = resulto(3);
ls = resulto(4);
ms = resulto(5);
ns = resulto(6);

nunZ = nunZ + d + Zs     % La Z-koordinato por la dua surfaco

Kaj la bazaj rezultoj de supra ekzempla programo estis:

% Komencaj valuoj
%       Koordinatoj    "vektoro"
%       X0   Y0   Z0   l0   m0   n0
ans =   10   20    0    0    0    1

nunZ = 0

% Rezultoj por la unua optika surfaco
%           Xs          Ys           Zs          ls          ms          ns
resulto =   10.000000   20.000000    2.532057   -0.033904   -0.067808    0.997122

nunZ =  52.532
sagito =  2.5321
            
% Rezultoj por la dua optika surfaco
%            Xs        Ys          Zs         ls         ms         ns
resulto =    9.91682   19.83364   -2.48957   -0.10406   -0.20812    0.97255

nunZ =  57.510

La lumradio do startis en koordinatoj X0 = 10 mm, Y0 = 20 mm, Z0 = 0 kaj la horizontala (ĉar nur n0 en Z-direkto estas alia ol nulo) lumo trafis la lenson en samaj koordinatoj Xs = 10 mm kaj Ys = 20 mm. Tamen Zs estas nur 2½ mm, kvankam estis la distanco d = 50 mm

Ni speciale notu ke la unua rezulto Zs estas mezurita el la unua krucaĵo de lenso kaj la optika akso, ne el Z0 . Estas la "sagitta" de lenso el la punkto kie la lumo trafas la surfacon. La distanco el origino de Z-koordinato estas Z0 + d + Zs kaj oni do ne forgesu por pensi pri la distanco d

La dua rezulto montras ke la lumradio iom movis en vitro en X- kaj Y-koordinatoj. La lumo refraktas direkte al la optika akso. La lumo ne plu estas tute horizontala. La rezulto Zs estas denove mezurita el lenso. En Z-direkto la lumo do trafas la surfacon en negativa valuo, pro la kurbeco de lensa surfaco. Estas denove la "sagitta", sed nun negativa ĉar estas maldekstren. Certe la lumo tamen progresis dekstren tuttempe.

Ni devas ankaŭ pensi pri la dikeco de lenso. La vojo en Z-direkto el la unua rezulto tamen ne estas la tuta dikeco de lenso. Ni subtrahu el dikeco la valuon "sagitta" de unua Zs.

En la ekzemplo la Z-koordinato sur la dua optika surfaco do fine estis nunZ = 57.510 kaj la aliaj du koordinatoj estis Xs = 9.91682 ; Ys = 19.83364 sed la kalkulo estis en 3D-koordinatoj kaj tial povus esti malfacile por trovi la komunan punkton de vektoroj. Prefere mi kalkulu la tranĉan punkton en 2D -koordinatoj.

Nu, nature ni volas vidi ankaŭ pli bonaj rezultoj, grafikon ... pli utilan ekzemplon ... kaj jen estas simpla grafika rezulto de 6 lumradioj kioj veturas en ZY-ebeno:

Provizore mi ne desegnas tre bone, sed eble mi lernos iom post iom. Formo de lenso tamen estas jam videbla en la bildo. Jen por la bona programo "GNU Octave" mia modesta programo kio produktis la supran bildon:

d = 50;        % Distanco de lumo el lenso en komenco
r = 100;       % La radiuso de kurbeco por la unua sfera surfaco

naero = 1;
nglaso = 2.0;           % Iom alta valuo por n ...
mus = naero / nglaso;

% Komencaj koordinatoj de lumradioj por la bildo
X = cell(6, 1);
X{1, 1} = [ 0  40 0 ];    
X{2, 1} = [ 0  30 0 ];    
X{3, 1} = [ 0  20 0 ];    
X{4, 1} = [ 0  10 0 ];
X{5, 1} = [ 0   0 0 ];
X{6, 1} = [ 0 -10 0 ];

% Komencaj Z- kaj Y- koordinatoj por bildo
x0 = 0;                   % Z = 0

y0 = cell(6, 1);
for i = [1:6]
  y0{i} = X{i}(2);
endfor

% Punktoj por desegni liniojn post la kalkulado
xk = cell(6, 3);       % (numero de lumradio, loko)
yk = cell(6, 3);

anguloY = 110;         
% Angulo de lumo kun la vertikala Y-akso en gradoj
% La direkto de lumo do estas 90° + 20° el la vertikala akso

% La lumradioj estu en ZY-ebeno
l0 = 0;
m0 = cosd(anguloY);    % ZY-ebeno

% Estas ja : v^2 = l0^2 + m0^2 + n0^2
% Kaj la longo v estu = 1
% Do : 1 - l0^2 - m0^2 = n0^2
n0 = sqrt(1 - l0^2 - m0^2);

% Origine la direkto de lumo estas la sama por ĉiuj lumradioj
v = cell(6, 1);
for i = [1:6]
  v{i, 1} = [ l0 m0 n0 ];
endfor

nunZ = cell(6, 1);        % La valuoj de Z-koordinatoj
sagito = cell(6, 1);      % La valuoj de "sagitta"

% Unua optika surfaco

for i = [1:6]
  resulto = sfera (X{i}, v{i}, r, d, mus);
  
  Zs = resulto(3);
  nunZ{i, 1} = d + Zs;
  % La Z-koordinatoj por la unua surfaco
  sagito(i, 1) = Zs;  
  
  xk(i, 1) = nunZ{i, 1};
  yk(i, 1) = resulto(2);
  
  X(i, 1) = [ resulto(1) resulto(2) resulto(3) ];
  v(i, 1) = [ resulto(4) resulto(5) resulto(6) ];
endfor

% Dua optika surfaco

r = -100;          % La (negativa) radiuso de kurbeco por la dua surfaco
dikeco = 20;       % Tuta dikeco de lenso
mus = 1 / mus;

for i = [1:6]
  d = dikeco - sagito{i};
  resulto = sfera (X{i}, v{i}, r, d, mus);
  
  Zs = resulto(3);
  nunZ{i, 1} = nunZ{i} + d + Zs;
  % La Z-koordinatoj por la dua surfaco
  sagito(i, 1) = Zs;  
  
  xk(i, 2) = nunZ{i, 1};
  yk(i, 2) = resulto(2);
   
  X(i, 1) = [ resulto(1) resulto(2) resulto(3) ];
  v(i, 1) = [ resulto(4) resulto(5) resulto(6) ];  
endfor

% La komuna punkto de lumradioj?
% Provizore nur tute simpla solvo en ZY-ebeno
for i = [1:6]
  x = nunZ{i}(1);
  y = X{i}(2); 
  xk{i, 3} = x + 60 * v{i}(3);
  yk{i, 3} = y + 60 * v{i}(2);
endfor

% Ni kalkulu la formon de lenso
lensox = cell(15, 1);
lensoy = cell(15, 1);
for i = [1:15]
  h = -40 + i*5;
  lensoy(i) = h;
  lensox(i) = sagitta (abs(r), h);
endfor
x1s = 50 + [ lensox{1:15} ];
x2s = 70 - [ lensox{1:15} ];
ys = [ lensoy{1:15} ];


figure()
axis( [-10, 120, -35, 45 ] );
grid on
hold on

% Desegnu la formon de lenso
line ("xdata", x1s, "ydata", ys, "color", "red" )
line ("xdata", x2s, "ydata", ys, "color", "red" )

text (-5, 2, "optika akso") 
line ("xdata", [ -10 120 ], "ydata", [ 0 0 ], "color", "cyan" )

text (15, 35, "envenanta samdirekta lumo", "color", "green" ) 

text (58, 35, "lenso")
line ("xdata", [ 50 50 ], "ydata", [ -30 40 ], "color", "yellow" )
line ("xdata", [ 50+dikeco 50+dikeco ], "ydata", [ -30 40 ], "color", "yellow" )

text (90, 5, "refraktita lumo", "color", "blue" ) 

% Linioj por la lumo
for i = [1:6]
  line ("xdata", [ x0, xk{i, 1} ], "ydata", [ y0{i}, yk{i, 1} ], "color", "green" )
  line ("xdata", [ xk{i, 1}, xk{i, 2} ], "ydata", [ yk{i, 1},  yk{i, 2} ], "color", "red" )
  line ("xdata", [ xk{i, 2}, xk{i, 3} ], "ydata", [ yk{i, 2},  yk{i, 3} ], "color", "blue" )
endfor

hold off
xlabel ("Z (mm)");
ylabel ("Y (mm)");
title ("ZY -ebeno"); 

Mi ne kalkulis la krucan punkton de koordinatoj, sed tion oni ja povas proksimume vidi el la bildo. La origine samdirekta lumo en ekzemplo veturas en ZY-ebeno suben en angulo 110° el Y-akso, do la angulo de lumo estas -20° el horizontala Z-akso.

La dikeco de lenso ja estas iom granda, 20 milimetroj. La fokusa distanco? Eble proksimume 50 milimetroj?

Nu, la ekzemplo ja ne estas ia bona programo por plani teleskopaj objektivoj, sed kredeble ekzistas tiaj programoj haveblaj por tiuj kiuj ilin bezonas. Mia celo estas nur por lerni kiel kalkuli simplan optikan sistemon. Certe eblas konstrui pli bonaj programoj. Ĉi tio estas nur mia rapida komenca rezulto. Pli bone mem kompreni kaj mem labori ol uzi pretaj rezultoj faritaj de aliaj.

Jen fine iom alia diagrama ekzemplo pri la sama temo, nun 7 lumradioj en angulo -10° (en programo iom alia valuo anguloY = 100; por angulo el la Y-akso, do 90° + 10°), la vitro refraktas iom pli malmulte, n = 1,75 kaj la fokusa distanco do estas iom pli longa. Tamen la lumo el la randoj de sfera lenso estas iom malbona. Notu ke unu el la lumradioj veturas proksimume tra la optika centro de lenso.

Unu simpla sfera lenso certe ne estas taŭga objektivo por moderna teleskopo. Diversaj koloroj (lumo de aliaj ondlongoj) alie refraktas en vitro. Oni bezonas almenaŭ 2 lensoj de konvene aliaj optikaj vitroj ( Vidu artikolon akromata lenso ) por "ekvilibrigi" la refraktan eraron de lumo, por pli bonaj objektivoj (Vidu la anglan artikolon "Apochromat" ) almenaŭ 3 lensoj. Mia intenco nun tamen ne estas por absorbiĝi pli profunde al ĉi tio temo. Mi nome ne produktas lensajn objektivojn. Mi nur batalas tra la vivo.

Kaj certe fine .......... NI VENKOS!

La Ambasadoro en Finnlando
de sendependa nacio
Mueleja Insulo


Menuo
Ĉefa paĝo (finna lingvo)