Van ötletetek a következőre?
Van egy ismert egyenletű parabolám és egy P(x0,y0) pontom aminek mindkét koordinátáját ismerem. Szükségem lenne a legrövidebb távolságra a kettő között, így szükségem lenne annak a merőlegesnek T(x1,x2) talppontjának a koordinátáira, amit a P ponton keresztül állítok a parabolára.
Az egész egy számítógépes program részeként működne, így a legjobb az lenne, ha ki tudnám fejezni x1=... és y1=... módon.
Amit én próbáltam az a következő: Felírtam a merőleges egyenletét a v(x1-x0,y1-y0) koordinátákkal, amiből ennek a merőlegesnek a meredeksége (y1-y0)/(x1-x0). A keresett T pont y1 koordinátáját x1 ismeretében a parabola egyenletéből meg lehet mondani, hiszen T a parabola pontja. A parabola x1 pontjában vett derivált értéke az ott lévő érintő meredeksége. Ez az érintő merőleges a PT által meghatározott eredeti merőleges egyenesre. Így felírható, hogy -(x1-x0)/(y1-y0)=p'(x1), ahol p a parabola egyenlete y-ra rendezve. y1 kifejezhető, így egy egyismeretlenes egyenletet kapunk x1-re, ami megoldható. A probléma csupán, hogy egy harmadfokú egyenletre vezet a műveletek elvégzése, ami nem túl ideális a leprogramozás szempontjából...
Így ezzel fordulok hozzátok, hogy ha van bármi ötletetek, hogy hogyan tudnám a P pont és a parabola közötti legrövidebb távolságot legegyszerűbben meghatározni, kérlek ne tartsátok magatokban! :)
Előre is köszönöm!
A megoldásod geometriailag még jónak is tűnhet, de számítógépes megvalósításra nem ideális. Elég lenne a P pontban és a parabolagörbén egy futópontban gondolkodni.
Szerintem jobban jársz, ha a P pont x és y koordinátájából meghatározol egy, várhatóan a legközelebbi pontot tartalmazó intervallumot x-ben és y-ban, majd ezek közti tartományban iterálással közelíted. Egy ügyes kis iterációs ciklussal kívánt pontossággal meg tudod határozni, matematikailag meg csak a Pithagorasz-tételre van szükséged.
Ha mindenképp zárt alakban akarod megoldani, és a parabolád egyenlete Ax^2 + Bx + C, a következőt kell tenned:
Megtalálni, mely x-re lesz merőleges az (x - x0, Ax^2 + Bx + C - y0) vektor az (1, 2Ax + B) vektorra. Az első ugye az ismeretlen, legközelebbi pontból a P-be húzott vektor, a második a parabola meredekségének megfelelő vektor ugyanezen pontban.
A kettő merőleges, ha a skalárszorzatuk 0, azaz (x - x0) + (Ax^2 + Bx + C - y0)(2Ax + B) = 0. Ezt már neked kell kifejtened és megoldanod. Sajnos harmadfokú lesz az egyenlet, dehát ilyen az élet.
Ha tudsz deriválni, akkor én azt javaslom, hogy paraméteresen írd fel a parabolát, mondjuk
x = f(t),
y = g(t)
(ugye nem feltétlenül „egyenes állású”).
Akkor a t paraméterhez tartozó (f(t), g(t)) pont megvan, ennek a távolsága P-től
gyök((f(t) – x0)^2 + (g(t) – y0)^2),
mivel pedig a gyökfüggvény monoton nő, az argumentuma is mindig pozitív, stb. vagy a távolság minimumhelye a távolságnégyzet minimumhelyével egyezik, ezért elég az
h(t) = (f(t) – x0)^2 + (g(t) – y0)^2
függvény minimumhelyét megkeresni. Ez pedig ott lesz, ahol
h'(t) = 0.
És ez valószínűleg azt a harmadfokú egyenletet adja majd, amit a 16:04-es levezetett az „egyenes állású” parabola esetére.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!