![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
курсовым проектом завалили. нужно что бы сгенерировались точки и построить треугольник по этим точкам, а в нутри этого утрегольника построить еще один треугольник. помогите плиз.... а то каюк мне...
|
|
#2
|
||||
|
||||
|
Вопрос не совсем ясен. Трудно чтоль 6 точек сгенерить?
|
|
#3
|
|||
|
|||
|
не трудно. но не представляю как в одном треугольнике построить второй треугольник!!! если бы знал. то не спрашивал. а делфи за пол года изуить так не реально!
|
|
#4
|
|||
|
|||
|
А тут Delphi по-моему не причем...
|
|
#5
|
|||
|
|||
|
при том. что формула вычисления всего это-го есть. а как это написать на делфи что бы работало даже не представляю. вот в чем беда
|
|
#6
|
|||
|
|||
|
Цитата:
![]() |
|
#7
|
||||
|
||||
|
напиши формулу
|
|
#8
|
|||
|
|||
|
------------сам текст задания---------------
Построить два треугольника с вершинами в заданном множестве точек на плоскости так, чтобы первый треугольник лежал строго внутри второго. ------------формулы------------------------- преподаватель написала вот эти формулы: S="корень"p(p-a)(p-b)(p-c) P=a+b+с деленая 2 A="корень"(X2-X4)d степени2 + (Y2-Y4) в степени 2 |
|
#9
|
||||
|
||||
|
да проще через Canvas, думаю отстроить, чем в джиэле ковыряться...
Код:
Canvas.MoveTo(X0,Y0) //переместиться в точку X0,Y0 Canvas.LineTo(X1,Y1) // линия из точки X0,Y0 в X1,Y1 Последний раз редактировалось TOJluK, 10.06.2009 в 17:02. |
|
#10
|
|||
|
|||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TPnt = record
x, y: real;
end;
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function WherePoint(a, b, p: TPnt):integer;
var
S: real;
begin
S := (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);
if S > 0 then WherePoint := 1 else
if S < 0 then WherePoint := -1 else WherePoint := 0;
end;
(* функция определеяет относительное положение точки: внутри или нет *)
function PointInsideTreangle(a, b, c, p: TPnt):boolean;
var
s1, s2, s3: integer;
begin
Result := false;
s1 := WherePoint(a, b, p);
s2 := WherePoint(b, c, p);
if s2 * s1 <= 0 then exit;
s3 := WherePoint(c, a, p);
if s3 * s2 <= 0 then exit;
Result := true;
end;
function Min(a, b: real): real;
begin
if a < b then Result := a else Result := b;
end;
function Max(a, b: real): real;
begin
if a > b then Result := a else Result := b;
end;
function GetPnt(a, b, c: TPnt; MinX, MinY, MaxX, MaxY: real): TPnt;
var
P: TPnt;
begin
repeat
P.x := MinX + Random(Round(MaxX - MinX));
P.y := MinY + Random(Round(MaxY - MinY));
until PointInsideTreangle(a, b, c, p) = true;
Result := P;
end;
procedure DrawLine(P1, P2: TPnt; Canvas: TCanvas);
begin
with Canvas do begin
MoveTo(Round(P1.x), Round(P1.y));
LineTo(Round(P2.x), Round(P2.y));
end;
end;
procedure GenerateTriangle(a, b, c: TPnt);
var
cnt: integer;
MinX, MinY, MaxX, MaxY: real;
P1, P2, P3: TPnt;
begin
Randomize;
MinX := Min(Min(a.x, b.x), c.x);
MinY := Min(Min(a.y, b.y), c.y);
MaxX := Max(Max(a.x, b.x), c.x);
MaxY := Max(Max(a.y, b.y), c.y);
P1 := GetPnt(a, b, c, MinX, MinY, MaxX, MaxY);
P2 := GetPnt(a, b, c, MinX, MinY, MaxX, MaxY);
P3 := GetPnt(a, b, c, MinX, MinY, MaxX, MaxY);
DrawLine(P1, P2, Form1.Canvas);
DrawLine(P2, P3, Form1.Canvas);
DrawLine(P3, P1, Form1.Canvas);
end;
procedure RndPnt(var p: TPnt);
begin
Randomize;
p.x := Random(Form1.ClientWidth);
p.y := Random(Form1.ClientHeight);
end;
procedure Solve;
var
a, b, c: TPnt;
begin
Form1.Canvas.FillRect(Form1.ClientRect);
RndPnt(a);
RndPnt(b);
RndPnt(c);
DrawLine(a, b, Form1.Canvas);
DrawLine(b, c, Form1.Canvas);
DrawLine(c, a, Form1.Canvas);
Application.ProcessMessages;
GenerateTriangle(a, b, c);
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Solve;
end;
end.
|
|
#11
|
|||
|
|||
|
Спасибо огромное "ART". но хотел бы спросить еще об одном если не сложно. распиши или объясни принцип работы. и как можно сделать кнопки случайный кординаты и кнопки построить по этим кординатам.
|
|
#12
|
|||
|
|||
|
Сам разберешься..
А вот кнопка со случайными координатами: Код:
procedure CreateButton; begin Randomize; with TButton.Create(Self) do begin left := random(Form1.ClientWidth); top := random(Form1.ClientHeight); width := 20; height := 20; OnClick := BtnClick; Parent := Form1; end; end; procedure TForm1.BtnClick(Sender: TObject); begin //Обработчик события end; |
|
#13
|
|||
|
|||
|
и на этом спасибо!!!!!!
|