Rysowanie tójkąta- problem w obliczeniach

0

Witam wszystkich...
Robię program w którym należy podać długości 3 boków, a program ma narysować z nich trójkącik...

I wygląda to tak że na pierwszej formie mam podawanie długości boków, i sortowanie ich za razem. Tak więc zawsze są one malejące... a >= b >= c

Przechodząc do formy 2 i klikając w button rysuj program zamienia długości boków na piksele.

Największy bok ma 700 pikseli. A kolejne ze wzorów:

a1:=700;
b1:=(b*a1)/a;
c1:=(c*b1)/b;

{a,b,c - długości boków podanych na pierwszej formie}

Wszystko mi wygląda na ładnie i sprawnie, ale kiedy daję boki 3,4,5 powinien narysować mniej więcej trójkąt prostokątny (mniej więcej ponieważ button zawiera instrukcje zaokrąglające), Ale nie rysuje... doszedłem do tego że źle może mi obliczać wysokość (h - w programie). A jeżeli nie to możliwe że jeszcze pole tego trójkąta może być źle obliczane, a co za tym idzie to h również...
Oto kod przycisku:

a1:=700;
b1:=(b*a1)/a;
c1:=(c*b1)/b;

a:= round(a1);
b:= round(b1);
c:= round(c1);

ax:=50;
ay:=50;

polobw1 := (a+b+c)/2;
polobw := round(polobw1);
pole := polobw*(polobw-a)*(polobw-b)*(polobw-c);

polobw1 := sqrt(pole);
pole := round(polobw1);

h1:= pole/(350);
h:= round(h1);

x1:= sqr(c)-sqr(h);
x1:= sqrt(x1);
x:= round(x1);

bx:=ax + a;
by:=ay;

cx := ax+x ;
cy := ay + h;

Label1.caption := inttostr(a);
Label2.caption := inttostr(b);
Label3.caption := inttostr(c);

Canvas.Brush.Color := clTeal;
Canvas.Polygon([Point(ax, ay), Point(bx, by),
Point(cx, cy)]);

Proszę jak możecie to pomóżcie!!

Z gróy thx!

Edit:
Jeżeli by kogoś to zainteresowało tutaj Możecie zassać moje wypociny ;)

0

imo, trzeba zmienić

cx := ax+x ; 

na

cx := bx-x; 

lub, jak wolisz

cx := ax-x+a; 
0

ni w d**e ni w oko nie działa :/

Edit:
Zaobserwowałem, że prawdopodobnie długość h nie wiedzieć czemu zawsze jest taka sama :/

0

Dopiero teraz zauważyłem temat ale tak się składa że niedawno napisałem program robiący dokładnie to samo. Od razu się przyznaję że nie analizowałem Twojego kodu, ale podam ci fragment mojego programu który napisałem jakiś czas temu żebyś zobaczył jak to działa u mnie.

W obliczaniu współrzędnych punktu schodzenia się odcinków wykorzystałem twierdzenie cosinusów.

cosa:=((sqr(a)+sqr(b)-sqr(c)) / (2*a*b)); { cos[alfa]=( a^2+b^2-c^2) / (2ab) )
{ obliczenie współrzędnej x }
x:=a*cosa; ( dlugosc podstawy * cos[alfa] )
x:=round(x); // zaokrąglenie x do pełnej wartości
{ obliczenie wysokosci, a zarazem współrzędnej y }
y:=sqrt(sqr(a) - sqr(x)); // (obliczenie h trójkąta z twierdzenia Pitagorasa)
y:=round(y); //zaokrąglenie do pełnej wartości

Te linijki pozwalają na wyznaczenie współrzędnych x,y punktu w których schodzą się odcinki - reszta programu to już banał a obróbka i prezentacja tych danych zależy wyłącznie od Ciebie.
Mam nadzieję że pomogłem.

Pozdrawiam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.