Trigonometria probléma

Sosem volt erősségem a trigonometria. Eddig ezt nem is éreztem különösebb hátránynak, most viszont a szoftverhez amin dolgozom, meg kellene oldani egy háromszög hasonlósági összefüggést (értelemszerűen függvény formájában), ehhez kérném a segítségeteket. Készítettem egy kis mórickarajzot is. Adott egy sík koordináta-rendszer aminek a meridiánjai (nem meglepő módon) derékszöget zárnak be.
Ebben a rendszerben a felhasználó felvesz egy A illetve egy B pontot, amit "virtuálisan" összekötve kapunk egy oldalt.
1. Kérdés: Ha ezt az oldalt szeretném (pozitív vagy negatív irányba) meghosszabbítani egy általam megadott értékkel, akkor hogy számíthatom ki az új pont (C) X és Y koordinátáját?
2. Kérdés: Ugyanerre a tengelyre szeretnék merőlegesen felvenni egy másik egyenest (ami a tengelyt pont középen metszi). Ebből csak az érték az ismert, azaz a leendő egyenes hossza. A kérdés pedig a leendő pontok (D és E) X és Y koordinátái.

Remélem sikerült érthetően elmagyarázni a problémámat.
Köszi a segítséget.

Update: Köszönöm mindenkinek a segítséget, az itt leírt módszerekkel, sikerült megoldani a feladatot.

Hozzászólások

Ha jol szamolom:
1)
CX = (BX-AX)*delta+AX
CY = (BY-AY)*delta+BY

2) itt keves az info, kene tudni, hogy az DE egyenes hol van (pl milyen tavol B ponttol)

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

bemenő paraméter: A(ax:valós,ay:valós), B(bx:valós,by:valós), l:valós

ha l > 0:
akkor C = B + (A->B)/(|A->B|)*l
C pont a B-hez hozzáadva a az A-ból B-be mutató vektorból előállított egységvektor l szeresét.

ab = sqrt((bx-ax)^2+(by-ay)^2)

cx = bx + (bx-ax)/ab*l
cy = by + (by-ay)/ab*l

ha l < 0:

hasonlóan
C = A + (B->A)/(|B->A|)*|l|
a D és E trükkösebb, jelezd, ha eddig érthetően írtam le és nem értettem félre.
Lehet, hogy DE felezi a BC-t?

Nos így első nekifutásra teljesen érthető és igen erre gondoltam, de behelyettesítve számokkal némi eltérést mutatnak a kapott értékek a valósághoz képest.
Például:
A(X=4, Y=3)
B(X=8, Y=7)
l=8
Ez alapján:
ab = sqrt((bx-ax)^2+(by-ay)^2)
ab = 5,6568
cx = bx + (bx-ax)/ab*l --> cx = 8+(8-4)/5,6568*8 -->13,6569
cy = by + (by-ay)/ab*l --> cy = 7+(7-3)/5,6568*8 -->12,6569

Ha megrajzolom akkor viszont cx=12,6569, cy=13,6569. Tehát éppen fordítva. Ezt nem igazán értem, hogy miként jön ki.
*Szerk: Más számokkal helyettesítve jónak tűnik.

"Lehet, hogy DE felezi a BC-t?"
Nem. Fordítva. BC felezi DE-t, tehát a D és E pontok a BC tengely bármely pontjától azonos távolságra helyezkednek el.
A DE tengely bárhol elhelyezkedhet, de mindig derékszöget zár be a BC tengellyel.

--------------
“If there were no hell, we would be like the animals. No hell, no dignity.”

Márpedig jó az, vagy a tengelyeket cserélted fel, vagy a rajzolást rontottad el.

Akkor viszont, ahogy felettem is írták, D-E lehet akárhol, kell még valami feltétel, hogy hol legyen a merőleges szakasz.

A->B vektorból egységvektort már csináltunk az előbb, ezt 90°-kal elforgatni azt jelenti, hogy a koordinátákat felcseréled és az egyiket -1-gyel szorzod.

V vektor legyen ami DE irányba áll és egységvektor (az előző comment jelöléseivel):

vx = (by-ay)/ab
vy = -(bx-ax)/ab

D = F + V*|DE|/2 és E = F - V*|DE|/2 lesz a két pont, ha |DE| a szakasz hossza, F pedig a felezőpontjuk, ami valahova a BC szakaszra esik.

Ha DE felezi BC-t, akkor F = (B+C)/2 .
Ezek az egyenletek koordinátánként értendőek, tehát külön x-re és y-ra két formulát ad.

"Márpedig jó az, vagy a tengelyeket cserélted fel, vagy a rajzolást rontottad el."
Igen, valamit elnézhettem, mert más számokkal tökéletes. Első probléma megoldva, köszönöm.

A merőleges, mint írtam bárhol lehet az AB tengelyen. Most a példa kedvéért legyen mondjuk a B ponton.
Bemenő paraméterként megadnám a B X és Y koordinátáit, valamint a leendő DE tengely hosszát.
A cél tehát egy AB-ra merőleges tengely két pontjának (D és E) X és Y koordinátájának a meghatározása.

--------------
“If there were no hell, we would be like the animals. No hell, no dignity.”

A merőleges vektorokat normálvektornak hívják, és pl. egy v=(3,10) vektorra merőleges az u1=(-10,3) illetve az u2=(10,-3) vektor.
Az AB vektort lenormálod (a koordinátákat elosztod AB hosszával), veszed a bal normálvektorát, megszorzod a DE hosszának felével, és hozzáadod a B koordinátáit: így kapod a D pontot. Az E pont hasonló, csak ott a másik irányba kell menni.

pl.

A=(10,20)
B=(30,35)
DE hossza legyen 5.
--
AB=B-A=(20,15)
AB lenormálva: (0.8, 0.6)
AB normáltjának balnormálvektora: (-0.6, 0.8)
DE félhossza 2.5
D = B + 2.5*(-0.6, 0.8) = (30, 35) + (-1.5, 2) = (28.5, 37)
E = B - 2.5*(-0.6, 0.8) = (30, 35) - (-1.5, 2) = (31.5, 33)

Matek házi felső tagozatban? Ja, és koordinátageometria, ha már hasogatom a szőrszálat...

Nekem inkább a középiskolából dereng valami, de ez most teljesen mindegy. A lényeg, hogy elég régen volt és azóta egyetlen alkalom sem indokolta, hogy felfrissítsem ezeket az ismereteimet. Lámaság vagy nem, de az idő elmúltával rozsdásodik az ember, ez van.

--------------
“If there were no hell, we would be like the animals. No hell, no dignity.”