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.8bsqrt(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.8bsqrt(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.8bsqrt(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.8bsqrt(2)/2);
odchylenie.y := startpos.y - round(0.8b*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?