![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Очень нужна помощь!!!
Никак не могу сообразить, вот задание: Дана прямоугольная область. На которой располагаются шарики с числами от 1 до кол-ва шариков. Шарики характеризуются цветом, координатами и соединяются стрелками по порядку нумерации. Если происходит удаление шарика, то оставшиеся шарики перенумеровываются. Провести отображение задачи, предусмотреть добавление и удаление шариков, изменение их цвета и координат. Реализовано, создание шариков, их изменение и удаление, осталась проблема - отрисовать стрелки (от 1 ко 2, от 2 к 3 и т.д.) и сделать так, чтобы после удаления шарики перенумеровывались может у кого-то что-то подобное есть, спасите погибающую студентку |
#2
|
|||
|
|||
![]() А вы не пробовали. Есть список с координатами по нему и прорисовывайте заново нумерацию и стрелки после удаления.Линию со стрелько можно рисовать так:
Код:
//Отображение стрелки procedure DrawArrowHead(Canvas: TCanvas; X,Y: Integer; Angle,LW: Extended); var A1,A2: Extended; Arrow: array[0..3] of TPoint; OldWidth: Integer; const Beta=0.322; LineLen=4.74; CentLen=3; begin Angle:=Pi+Angle; Arrow[0]:=Point(X,Y); A1:=Angle-Beta; A2:=Angle+Beta; Arrow[1]:=Point(X+Round(LineLen*LW*Cos(A1)),Y-Round(LineLen*LW*Sin(A1))); Arrow[2]:=Point(X+Round(CentLen*LW*Cos(Angle)),Y-Round(CentLen*LW*Sin(Angle))); Arrow[3]:=Point(X+Round(LineLen*LW*Cos(A2)),Y-Round(LineLen*LW*Sin(A2))); OldWidth:=Canvas.Pen.Width; Canvas.Pen.Width:=1; Canvas.Polygon(Arrow); Canvas.Pen.Width:=OldWidth end; //рисуем линию со стрелкой procedure DrawArrow(Canvas: TCanvas; X1,Y1,X2,Y2: Integer; LW: Extended); var Angle: Extended; begin Angle:=ArcTan2(Y1-Y2,X2-X1); Canvas.MoveTo(X1,Y1); Canvas.LineTo(X2-Round(2*LW*Cos(Angle)),Y2+Round(2*LW*Sin(Angle))); DrawArrowHead(Canvas,X2,Y2,Angle,LW); YposEndIf:=Y2; XposBeginIf:=X2; end; Пример: Код:
Form1.Canvas.Pen.Color:=clBlack; Form1.Canvas.Pen.Width:=2; Form1.Canvas.Brush.Color:=clBlack; DrawArrow(Form1.Canvas,10,200,300,200,4); Последний раз редактировалось MotoArhangel, 14.07.2014 в 10:15. |