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