![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() и на этом спасибо!!!!!!
|