Trójwyniar na Image :)

0

oto fajny kodzik

var
x,y,z : integer;
p : TPoint;
a,b : integer;
odchylenie : TPoint;
startpos : TPoint;
old, oldstartpos, oldodchylenie : TPoint;

procedure cosik
begin
image1.canvas.MoveTo(startpos.x,startpos.y);
image1.canvas.LineTo(startpos.x + a,startpos.y); pierwsza linia
odchylenie left
odchylenie.x := startpos.x - round(0.8
b
sqrt(2)/2);
odchylenie.y := startpos.y - round(0.8bsqrt(2)/2);
image1.canvas.MoveTo(startpos.x,startpos.y);
image1.canvas.LineTo(odchylenie.x,odchylenie.y);
stare atrybuty :P
old.x := odchylenie.x;
old.y := odchylenie.y;
oldodchylenie.x := old.x;
oldodchylenie.y := old.y;
odchylenie right
odchylenie.x := a + startpos.x - round(0.8
b
sqrt(2)/2);
odchylenie.y := startpos.y - round(0.8bsqrt(2)/2);

image1.canvas.MoveTo(startpos.x + a,startpos.y);
image1.canvas.LineTo(odchylenie.x,odchylenie.y);
image1.canvas.MoveTo(old.x, old.y);
image1.canvas.LineTo(odchylenie.x, odchylenie.y);

*a teraz dół :]

startpos.y := startpos.y + b; *tylko ta linijka wszystko zmienie reszta to juz skopiowane :]

image1.canvas.MoveTo(startpos.x,startpos.y);
image1.canvas.LineTo(startpos.x + a,startpos.y); pierwsza linia
odchylenie left
odchylenie.x := startpos.x - round(0.8
b
sqrt(2)/2);
odchylenie.y := startpos.y - round(0.8bsqrt(2)/2);
image1.canvas.MoveTo(startpos.x,startpos.y);
image1.canvas.LineTo(odchylenie.x,odchylenie.y);
{stare atrybuty :P}
old.x := odchylenie.x;
old.y := odchylenie.y;
odchylenie right
odchylenie.x := a + startpos.x - round(0.8
bsqrt(2)/2);
odchylenie.y := startpos.y - round(0.8
b*sqrt(2)/2);

image1.canvas.MoveTo(startpos.x + a,startpos.y);
image1.canvas.LineTo(odchylenie.x,odchylenie.y);

image1.canvas.MoveTo(old.x, old.y);
image1.canvas.LineTo(odchylenie.x, odchylenie.y);

*rysujemy krawędzie boczne

*1
image1.canvas.MoveTo(startpos.x, startpos.y);
image1.canvas.LineTo(startpos.x, startpos.y - b);

*2
image1.canvas.MoveTo(startpos.x + a, startpos.y);
image1.canvas.LineTo(startpos.x + a, startpos.y - b);

*3
image1.canvas.MoveTo(oldodchylenie.x, oldodchylenie.y);
image1.canvas.LineTo(old.x, old.y);

*4
image1.canvas.MoveTo(oldodchylenie.x + b , oldodchylenie.y);
image1.canvas.LineTo(old.x + b, old.y);

end;

w oncreate dajcie
begin
a := 30;
b := 30;
startpos.x := 50;
startpos.y := 50;
oldstartpos.x := startpos.x;
oldstartpos.y := startpos.y;
end;

[...]
end. :)

i teraz pytanie dlaczego mi nie rysuje się jedna linia do końca - jak zrobićie to co tam jest to będziecie widzieć (w powiększynie czy tez nie) że brakuje jednego piksela - nie wiem dlaczego :(

po prostu krawędź podstawy nie łączy się z krawędzią boczną :]

Wyjaśnijcie mi dlaczego - nie potrzebuję kodu tylko wyjaśnienie :]

może rysowanie odchylenia jest złe [pozycja] - round(0.8bsqrt(2)/2);

albo to tak jest i już :]

chodzi mi tylko o wyjaśnienie czy to jest prawidłowe a jak nie to dlaczego?

0

mała poprawka ostatnie linijki kodu wyglądają (prawidłowo - chyba ;))

tak

//4
image1.canvas.MoveTo(oldodchylenie.x + a , oldodchylenie.y);
image1.canvas.LineTo(old.x + a, old.y);

1 użytkowników online, w tym zalogowanych: 0, gości: 1