Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.06.2009, 13:30
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию помогите с решением задачи

курсовым проектом завалили. нужно что бы сгенерировались точки и построить треугольник по этим точкам, а в нутри этого утрегольника построить еще один треугольник. помогите плиз.... а то каюк мне...
Ответить с цитированием
  #2  
Старый 10.06.2009, 13:55
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вопрос не совсем ясен. Трудно чтоль 6 точек сгенерить?
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 10.06.2009, 15:47
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

не трудно. но не представляю как в одном треугольнике построить второй треугольник!!! если бы знал. то не спрашивал. а делфи за пол года изуить так не реально!
Ответить с цитированием
  #4  
Старый 10.06.2009, 16:33
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

А тут Delphi по-моему не причем...
Ответить с цитированием
  #5  
Старый 10.06.2009, 16:43
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

при том. что формула вычисления всего это-го есть. а как это написать на делфи что бы работало даже не представляю. вот в чем беда
Ответить с цитированием
  #6  
Старый 10.06.2009, 16:45
"Hatchet" Harry "Hatchet" Harry вне форума
Прохожий
 
Регистрация: 22.03.2009
Сообщения: 30
Репутация: 10
По умолчанию

Цитата:
Сообщение от delacky
не трудно. но не представляю как в одном треугольнике построить второй треугольник!!! если бы знал. то не спрашивал. а делфи за пол года изуить так не реально!
у треугольника 3 вершины => на первый треугольник генерим 3 точки. Каждая точка имеет координату (х,у), ну так вот... чтобы сгенерить второй треугольник внутри сгенеренного первого, необходимо сравнить координаты вершин будущего треугольника с координатами вершин уже построенного и соответственно построить, если вершины ОК. А непосредственно само построение можно, допустим, через опенжиэль реализовать (есть функция, которая строит треугольник из трех заданных по координатам точек). Вот...
Ответить с цитированием
  #7  
Старый 10.06.2009, 16:52
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

напиши формулу
Ответить с цитированием
  #8  
Старый 10.06.2009, 16:57
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

------------сам текст задания---------------
Построить два треугольника с вершинами в заданном множестве точек на плоскости так, чтобы первый треугольник лежал строго внутри второго.
------------формулы-------------------------
преподаватель написала вот эти формулы:
S="корень"p(p-a)(p-b)(p-c)
P=a+b+с деленая 2
A="корень"(X2-X4)d степени2 + (Y2-Y4) в степени 2
Ответить с цитированием
  #9  
Старый 10.06.2009, 16:58
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

да проще через Canvas, думаю отстроить, чем в джиэле ковыряться...
Код:
1
2
Canvas.MoveTo(X0,Y0) //переместиться в точку X0,Y0
Canvas.LineTo(X1,Y1) // линия из точки X0,Y0 в X1,Y1

Последний раз редактировалось TOJluK, 10.06.2009 в 17:02.
Ответить с цитированием
  #10  
Старый 10.06.2009, 17:04
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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  
Старый 10.06.2009, 17:28
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

Спасибо огромное "ART". но хотел бы спросить еще об одном если не сложно. распиши или объясни принцип работы. и как можно сделать кнопки случайный кординаты и кнопки построить по этим кординатам.
Ответить с цитированием
  #12  
Старый 10.06.2009, 17:36
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Сам разберешься..
А вот кнопка со случайными координатами:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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  
Старый 10.06.2009, 18:41
delacky delacky вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

и на этом спасибо!!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:39.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025