Sokan gondolhatnak, nem is tudna kiszamolni, azert hord itt ossze mindenfele hulyeseget a fenytoresrol.
Nos, akkor lassuk.
Talan kezdesnek a Fold feluleten szamoljunk tavolsagot. Mi kell ehhez?
http://en.wikipedia.org/wiki/Metric_tensor
Nem tunik bonyolultnak
skalar u=0 *radian;
skalar v=90*radian;
skalar du=1*radian;
skalar dv=1*radian;
skalar R=6378e3;
skalar E=R*R*sin(v)*sin(v);
skalar F=0;
skalar G=R*R;
printf("%Le %Le %Le \n",E,F,G);
skalar dr=sqrt(E*du*du + F*du*dv + G*dv*dv);
printf("%Lf \n",dr);
Egesz konnyu, ha az ember ismeri az E,F,G egyutthatokat. Az u es a v koordinatak a felulet belso koordinatai, radianban. A gombre ismert az E,F,G erteke, de mi van akkor, ha egy ismeretlen feluleten kell tavolsagot szamolni?
Ha ismert a felulet fuggvenye, akkor meghatarozhato az E,F,G az alabbi egyszeru modszerrel.
Vegyunk fel harom pontot a feluleten, ezek
a(u,v,R) , a(u+0.001,v,R) , a(u,v+0.001,R)
Mint kitunik, a masodik kicsit u koordinataban van elmozgatva, a harmadik v-ben.
Az alabbi sor a(u+0.001,v,R)-a(u,v,R) a masodik pontbol egy vektort vesz fel, ami az elso pont fele mutat. Ezt normalva, vagyis egysegnyi hosszura skalazva megkapjuk au vektort. A masik ket pontbol pedig av-t.
Ezek mar nem a belso, 2 dimenzios felulet koordinata-rendszereben vannak, hanem a kulso, 3d-ben, amibe a gomb be van agyazva.
Innen mar csak egy lepes az E,F,G , csak skalarszorzarukat kell venni a vektoroknak. Ez volt fentebb a masodik kepen. Ha vektorokat skalarisan szorzunk, akkor az igy nez ki.
A szorzas eredmenye pedig a ket vektor kozti szog koszinusza, ha mindket vektor egysegvektor, a vektoriranyu tavolsag, ha csak az egyik egyseg hosszu, vagy a vektor hosszanak a negyzete, ha a vektort onmagaval szorozzuk.
Az elso es az utolso eset most a fontos. Ha ket vektor meroleges egymasra, szorzatuk nullat ad. Az F egyutthato tehat nulla, ha az u es v kulso koordinata tengelyek merolegesek egymasra.
vektor au=normalt(a(u+0.001,v,R)-a(u,v,R));
vektor av=normalt(a(u,v+0.001,R)-a(u,v,R));
au=au*R;
av=av*R;
E=skalar_szorzat(au,au);
F=skalar_szorzat(au,av);
G=skalar_szorzat(av,av);
printf("%Le %Le %Le \n",E,F,G);
dr=sqrt(E*du*du + F*du*dv + G*dv*dv);
printf("%Lf \n",dr);
vektor va_=a(u ,v ,R);
vektor vb_=a(u+du,v+dv,R);
va_=va_-vb_;
dr=sqrt(skalar_szorzat(va_,va_));
printf("%Lf \n",dr);
Es az eredmeny:
4.067888e+13 0.000000e+00 4.067888e+13
157426.152109
4.067888e+13 1.016972e+07 4.067888e+13
157426.161948
157418.159772
Es ez mar a differencial geometria birodalma, ami az altalanos relativitas egyik legfontossabb matematikai eszkoze.