|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Принадлежит ли точка к области треугольника
Здравствуйте, я понимаю что в инете есть множество примеров реализации данной задачи. Но мне надо реализовать через создание классов(точки и вектора). Большую часть я с горем пополам сделал(создал классы и построил треугольник), а вот теперь не могу понять как сделать так чтобы оно определяло именно находится точка в треугольнике или нет.
Код:
unit Lab6V2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //=============================================================================// TDot = Class(TObject) private X,Y:integer; R:integer; Color:COLORREF; public procedure init(Xo,Yo,Ro:integer; CR:colorref); Procedure Draw; end; //=============================================================================// TVec = class(TObject) private X,Y:integer; R:Integer; Color:Colorref; public procedure init(A,B:TDot; D:Integer; Cr:colorref); procedure Draw(A:TDot); procedure Rotate(A:TVec; f:real); Procedure EndVector(A:TDot; Var B:TDot); end; //=============================================================================// Tmain = class(TForm) procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private A,B,C:TDot; AB,AC,BC:TVEc; Count:Integer; public end; //=============================================================================// var main: Tmain; implementation {$R *.dfm} //=============================================================================// Procedure TDot.init(Xo,Yo,Ro:integer; Cr:COLORREF); begin X:=Xo; Y:=Yo; R:=Ro; Color:=Cr; end; //=============================================================================// Procedure TDot.Draw; begin main.Canvas.Brush.Color:=Color; main.Canvas.Pen.Color:=Color; main.Canvas.Ellipse(X-R, Y-R, X+R, Y+R); end; //=============================================================================// procedure Tvec.init(A,B:TDot; D:integer; Cr:COLORREF); begin X:=B.X - A.X; Y:=B.Y - A.Y; R:=D; Color:=Cr; end; //=============================================================================// procedure Tvec.Draw(A:Tdot); begin Main.Canvas.Pen.Color:=Color; main.Canvas.Pen.Width:=R; main.Canvas.MoveTo(A.X, A.Y); main.Canvas.LineTo(A.X+X, A.Y+Y); end; //=============================================================================// procedure TVec.Rotate(A:TVec; f:real); begin x:=round(a.X*Cos(F)-a.Y*Sin(F)); y:=round(a.X*Sin(F)+a.Y*Cos(F)); end; //=============================================================================// procedure Tvec.EndVector(A:Tdot; var B:Tdot); begin B.X:=A.X+X; B.Y:=A.Y+Y; end; //=============================================================================// procedure Tmain.FormCreate(Sender: TObject); begin A:=Tdot.Create; B:=Tdot.Create; C:=Tdot.Create; AB:=Tvec.Create; AC:=Tvec.Create; BC:=Tvec.Create; count:=1; end; procedure Tmain.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if count mod 2 = 1 then A.init(X,Y,2,RGB(0,0,255)) else begin B.init(X,Y,2,RGB(0,0,255)); AB.init(A,B,4,RGB(255,255,0)); Ab.Draw(A); AC.init(A,B,4,RGB(255,255,0)); AC.Rotate(AB, Pi/3); AC.Draw(A); C.init(X,Y,2,RGB(0,0,255)); AC.EndVector(A,C); BC.init(B,C,4,RGB(255,255,0)); BC.Draw(b); end; A.Draw; B.Draw; C.Draw; Count:=Count+1; end; end. |
#2
|
|||
|
|||
Цитата:
Да, ещё, взглянул на твой код с классами. Что это . Как можно было умудриться написать в класс вектора ЦВЕТ (Color) и РАДИУС (R)? Код:
TVec = class(TObject) private X,Y:integer; R:Integer; Color:Colorref; public procedure init(A,B:TDot; D:Integer; Cr:colorref); procedure Draw(A:TDot); procedure Rotate(A:TVec; f:real); Procedure EndVector(A:TDot; Var B:TDot); end; P.S. Коллизия - столкновение. Впринципе тебе это и надо. Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось DungeonLords, 27.04.2009 в 23:24. |
#3
|
|||
|
|||
Спасибо почитаю про коллизию.
А насчет R в классе вектора то это толщина вектора, а Color это цвет вектора. Мне просто надо было чтобы Точка от Вектора визуально отличались. |