Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Геометрия в делфи. !срочно!


Лено ©   (2007-04-19 21:55:00) 

всем добрый вечер. кровь износу завтра с раннего утра надо сдать 4 программы.
1. Построить треугольник и его медианы по 3 точкам, которые запрашиваются в начале программы.
2. По запрашиваемым 4 точкам построить четырёхугольник и провести диагонали.
3. Построить по 3 запрашиваемым точкам треугольник и описанную вокруг него окружность.
4. По запрашиваемым точкам( не более 10) построить многоугольник и закрасить его.
помогите хоть с несколькими!
заранее спасибо!


Олег_П   (2007-04-22 16:45:00) [1]

> Fenik © [8]

А не подскажешь, как мне нарисовать стрелочку( т.е. тот-же самый треугольник но без основания). Подробнее: есть линия, ее начальная координата и конечная, так вот эту стрелочку нужно нарисовать на "конце" этой линии
----------> - конец линии - вершина треугольника.
Туго у меня с геометрией(математикой), поэтому прошу, если можно то сразу кодом, иначе от формул мне толку мало(их ведь еще и понять надо что-ж они делают) :(
Что-нибудь типа:
procedure DrawArrow(Cn: TCanvas; const P1, P2: TPoint; Angl, ASize:Double);
begin
 Cn.MoveTo(P1.X, P1.Y); Cn.LineTo(P2.X, P2.Y);
 {И тут расчитать эту стрелку}
end;

где P1 - начальные координаты линииъ
   Р2 - конечные..
   Angl - угол стрелки
   ASize - Длина катетов.
Заранее Спасибо.
PS - Сорри за вмешательство. Не хотелось начинать отдельной темы.


Fenik   (2007-04-20 17:47:00) [2]

Сорри. Функция несколько неправильная, если Ax = Bx;
Исправил:

function getTriangleOutCircleCenter(Ax, Ay, Bx, By, Cx, Cy: Integer): TPoint;
var M, N, Dx, Dy: Double;
   A2, ABx, ABy, ACx, Z, P: Integer;
begin
 A2 := Sqr(Ax) + Sqr(Ay);
 M := A2 - Sqr(Bx) - Sqr(By);
 N := A2 - Sqr(Cx) - Sqr(Cy);
 if Ax <> Bx then ABx := Ax - Bx
             else ABx := 1;
 ABy := Ay - By;
 ACx := Ax - Cx;
 Z := (ACx*ABy - ABx*(Ay - Cy)) shl 1;
 if Z <> 0 then Dy := (M*ACx - N*ABx) / Z
           else raise Exception.Create('Invalid triangle');
 Dx := (M/2 - Dy*ABy) / ABx;
 Result := Point(Round(Dx), Round(Dy));
end;


Fenik   (2007-04-20 17:08:00) [3]

3.

function getTriangleOutCircleCenter(Ax, Ay, Bx, By, Cx, Cy: Integer): TPoint;
var M, N, Dx, Dy: Double;
   A2, ABx, ABy, ACx, Z: Integer;
begin
 A2 := Sqr(Ax) + Sqr(Ay);
 M := A2 - Sqr(Bx) - Sqr(By);
 N := A2 - Sqr(Cx) - Sqr(Cy);
 ABx := Ax - Bx;
 ABy := Ay - By;
 ACx := Ax - Cx;
 Z := (ACx*ABy - ABx*(Ay - Cy)) shl 1;
 if (Z = 0) or (ABx = 0) then
   raise Exception.Create('Invalid triangle');
 Dy := (M*ACx - N*ABx) / Z;
 Dx := (M/2 - Dy*ABy) / ABx;
 Result := Point(Round(Dx), Round(Dy));
end;

Остальное тривиальное.


McSimm_   (2007-04-20 13:40:00) [4]


> кровь износу завтра с раннего утра надо сдать

надо же :)


Плохиш   (2007-04-20 13:36:00) [5]

Странно, раньше для "незаконченного высшего" надо было учиться на 4м курсе...

PS. Предлагаю в анкету в список образования добавить пункт "Неначатое"


Лено   (2007-04-20 07:59:00) [6]

homm да, первый:)


homm   (2007-04-19 22:20:00) [7]

> Лучше с другом у которого тоже есть друг

Ужас. Вот уж интересно что имелось ввиду.


Jeer   (2007-04-19 22:14:00) [8]


> мудрый совет: ложись спать,


Лучше с другом у которого тоже есть друг
И будет вам лучший из треугольников со временем превращающийся в многоугольник.:)


homm   (2007-04-19 22:00:00) [9]

> кровь износу завтра с раннего утра надо сдать 4 программы.

Првый курс что-ли? :) Послушай мой мудрый совет: ложись спать, оно того не стоит, раньше нужно было делать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо