Форум по 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, думаю отстроить, чем в джиэле ковыряться...
Код:
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
По умолчанию

Код:
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
По умолчанию

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

Код:
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, время: 04:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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