» »

Projekcija točke na premico

Projekcija točke na premico

c0dehunter ::

Zdravo, potreboval bi nekaj pomoči pri reverse engineeringu moje kode, ki sem jo napisal nekaj časa nazaj, vendar nikakor ne morem ugotovit kako sem do tega prišel :)

Imamo daljico CD in točko T, ki jo želimo projicirati. Stvari sem sem lotil z vektorji. Projicirana točka naj bo P.

P=C+k*vektor(CD) //potrebujemo samo še k
   (T.X*vektorCD.X + T.Y*vektorCD.Y) - (C.X*vektorCD.X + C.Y*vektorCD.Y)
k= ---------------------------------------------------------------------
             (vektorCD.X*vektorCD.X + vektorCD.Y*vektorCD.Y)


No, tu mi ni jasno kako sem dobil tale k.. Imenovalec vidim da je dolžina vektorja CD.
Hvala
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Genetic ::

k dobis s skalarnim produktom med enotskim vektorjem na CD (eCD) in CT

P = C + (CT*eCD)*CD , kjer je eCD enotski vektor na CD (eCD = CD/|CD|), (CT*eCD) je skalarni produkt
CT = (T.x-C.x, T.y-C.y)
CD = (CD.x, CD.y)
|CD| = CD.x*CD.x + CD.y+CD.y

k = CT*CD/|CD| = (T.x-C.x, T.y-C.y)*(CD.x, CD.y)/|CD| = ((T.x-C.x)*CD.x + (T.y-C.y)*CD.y)/|CD| =
= ((T.x*CD.x + T.y*CD.y) - (C.x*CD.x * C.y*CD.y)) / (CD.x*CD.x + CD.y*CD.y)

Popravek: v tvoji in moji kodi mora biti |CD| = sqrt(CD.x*CD.x + CD.y*CD.y)

Zgodovina sprememb…

  • spremenil: Genetic ()

c0dehunter ::

Genetic, hvala.

Btw, pri |CD| (oz. imenovalcu) imam jaz tako kot sem napisal in mi prav izračuna.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

klemenSLO ::

zame je to že višja znanost :)
Life is not measured in minutes, but in MOMENTS...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vektorji

Oddelek: Šola
103164 (2872) lebdim
»

[C++] Metode

Oddelek: Programiranje
51469 (1301) failcoder
»

Matematika - pomoč (strani: 1 2 3 )

Oddelek: Šola
10426070 (22645) daisy22
»

Freehand v krivuljo - C# ali VB

Oddelek: Programiranje
101453 (1324) PaX_MaN
»

Collision detection

Oddelek: Programiranje
81832 (1584) Senitel

Več podobnih tem