Vizualizacija prostora Lobacevskog - Alas

Vizualizacija prostora Lobacevskog - Alas Vizualizacija prostora Lobacevskog - Alas

alas.matf.bg.ac.rs
from alas.matf.bg.ac.rs More from this publisher
13.07.2015 Views

]Prikaz linija nakon projektovanja(* Projekcija duzi AB na orisferu je kruzni luk. Taj kruzni luk je \presek orisfere i sfere kroz tacke O, A i B ciji je centar na apsoluti z=0. \Centar te sfere odredjujemo kao presek simetralnih ravni duzi AB i OB i ravni \z=0. *)centarLukaAB[\[Omega]_, k_][{a1_, a2_}, {b1_, b2_}] := Module[{t} ,t = (a1 b1 + a2 b2 - k^2 + \[Omega]^2)/(-2 a2 b1 + 2 a1 b2);{t (a2 - b2) + (a1 + b1)/2, t (b1 - a1) + (a2 + b2)/2} (*koordinate centra luka AB, u ravni z=k *)]ugao[t_] :=If[t < 0, 2 Pi + t,t] ;(* funkcija koja konvetuje ugao iz [-Pi, Pi] u [0, 2 Pi] *)maxx = 1000;Ray[a_, b_] := Line[{a, a + maxx (b - a)}](* Funkcija za crtanje projekcije h-duzi. A, B, S su redom projekcije temena \duzi i sredista duzi *)LukAB[\[Omega]_, k_][a_, b_, s_] := Module[{c, v1, v2, vs, r, v1u, v2u, vsu} ,(*Prvo proverimo ako je neko od temena (ili oba) beskonacno daleka tacka*)(*1*)If[a == {\[Infinity], \[Infinity]},If[b == {\[Infinity], \[Infinity]},(*Ako su oba temena besk dal. tacka, ne crta se nista*){},(*Ako je a beskonacna , b konacna tacka,crta se zrak od b u pravcu sredista duzi*)Ray[b, s]] (* If *),(*2*)If[b == {\[Infinity], \[Infinity]},(*Ako je sada a konacna, b beskonacna tacka,crta se zrak od a u pravcu sredista duzi*)Ray [a, s],(* Ako su oba temena konacne tacke*)(*3*)If[ Abs[a[[1]] b[[2]] - a[[2]] b[[1]] ] < 0.001, (* proveravamo da li O,A,B pripadaju ravni normalnoj na apsolutu *)(*Ako pripadaju, ako je projekcija sredista izmedju a i b, onda crta duz.Ako nije izmedju, crta dve poluprave*)67

If[Norm[s - a] < Norm[b - a] \[And] (s - a)[[1]] (b - a)[[1]] > 0,Line[{a, b}],{Ray[a, 2 a - b], Ray[b, 2 b - a]}],(* Kada ne pripadaju ravni normalnoj na apsloutu,projekcija duzi je kruzni luk koji racunamo: *)c = centarLukaAB[\[Omega], k][a, b];v1 = a - c; (* vektori od centra luka do tacaka A i B *)v2 = b - c;vs = s - c; (*vektor sredista h-duzi ab*)v1u = ugao[N[Arg[{1, I}.v1]]]; (*uglovi tih vektora u odnosu na x osu u rasponu [-Pi, Pi], tj.[0, 2 Pi] *)v2u = ugao[N[Arg[{1, I}.v2]]];vsu = ugao[N[Arg[{1, I}.vs]]];{v1u, v2u} = Sort[{v1u, v2u}];r = N[Sqrt[v1.v1]];Circle[c, r,If[ vsu < v1u \[Or] v2u < vsu, {v2u - 2 Pi, v1u}, {v1u, v2u}]]] (* If 3*)] (* If 2*)](* If 1 *)] (* Module *)(*Funkcija koja odlucuje da li crtamo ivicu, ili samo njen deo, ili je uopste \ne crtamo u zavisnosti od toga sta je ispred a sta iza nas *)clipping[a_, b_, \[Omega]_, k_] := Module[{an, bn, x, t, \[Omega]k, c, d},\[Omega]k = hs2Klein[{0, 0, \[Omega]}][[3]];an = Drop[a/a[[4]], -1];bn = Drop[b/b[[4]], -1];If [(an[[3]]

If[Norm[s - a] < Norm[b - a] \[And] (s - a)[[1]] (b - a)[[1]] > 0,Line[{a, b}],{Ray[a, 2 a - b], Ray[b, 2 b - a]}],(* Kada ne pripadaju ravni normalnoj na apsloutu,projekcija duzi je kruzni luk koji racunamo: *)c = centarLukaAB[\[Omega], k][a, b];v1 = a - c; (* vektori od centra luka do tacaka A i B *)v2 = b - c;vs = s - c; (*vektor sredista h-duzi ab*)v1u = ugao[N[Arg[{1, I}.v1]]]; (*uglovi tih vektora u odnosu na x osu u rasponu [-Pi, Pi], tj.[0, 2 Pi] *)v2u = ugao[N[Arg[{1, I}.v2]]];vsu = ugao[N[Arg[{1, I}.vs]]];{v1u, v2u} = Sort[{v1u, v2u}];r = N[Sqrt[v1.v1]];Circle[c, r,If[ vsu < v1u \[Or] v2u < vsu, {v2u - 2 Pi, v1u}, {v1u, v2u}]]] (* If 3*)] (* If 2*)](* If 1 *)] (* Module *)(*Funkcija koja odlucuje da li crtamo ivicu, ili samo njen deo, ili je uopste \ne crtamo u zavisnosti od toga sta je ispred a sta iza nas *)clipping[a_, b_, \[Omega]_, k_] := Module[{an, bn, x, t, \[Omega]k, c, d},\[Omega]k = hs2Klein[{0, 0, \[Omega]}][[3]];an = Drop[a/a[[4]], -1];bn = Drop[b/b[[4]], -1];If [(an[[3]]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!