• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программа в Делфи

  • Автор темы Автор темы Warko
  • Дата начала Дата начала

Warko

Ученик
Регистрация
19 Ноя 2013
Сообщения
5
Реакции
0
Баллы
0
Программа в Делфи

Даны три точки с координатами (х1, у1), (х2, у2), (х3, у3), которые являются
вершинами некоторого прямоугольника со сторонами, параллельными осям
координат. Найти координаты четвертой точки.


Помогите кто может)
 
Вот как-то так по идеи выглядит програма:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
myt=record a,b:integer end;
var
Form1: TForm1;

implementation

{$R *.dfm}
procedure myDrawRect(x1,y1,x2,y2,x3,y3,x4,y4:integer);
begin
form1.Canvas.MoveTo(x1,y1);
form1.Canvas.lineto(x2,y2);
form1.Canvas.lineto(x3,y3);
form1.Canvas.lineto(x4,y4);
form1.Canvas.lineto(x1,y1);
end;
Function GetNt(n:integeR):myT;
begin
result.a:=1;result.b:=1;
if n=0 then begin result.a:=1;result.b:=1; end;
if n=1 then begin result.a:=1;result.b:=-1; end;
if n=2 then begin result.a:=-1;result.b:=1; end;
if n=3 then begin result.a:=-1;result.b:=-1; end;
end;
// R2
// b(x2,y2)========== C( X3,y3)
//--------*-\------*
//--------*--\-----*
//--------*---\----*
//--R1----*---\----*
//--------*----\---*
//--------*-----\--*
//--------*------\-*
// a(x1,y1)*======== * D(x4,y4) - искомая точка
//
//

procedure TForm1.Button1Click(Sender: TObject);
var r5,x1,y1,x2,y2,x3,y3,x4,y4:integer;
l,n,r4,r3,r1,r2:integer;
begin
x1:=200;y1:=200;
x2:=200;y2:=50;
x3:=50;y3:=50;
r1:=Round(SQRt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
r2:=Round(SQRt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)));
r3:=Round(SQrt(r2*r2+r1*r1));
if (x1-x2)>0 then
l:=Round(arctan((y1-y2)/(x1-x2))*180/pi) else l:=90;
// находим угол наклона сторны A
for n:=0 to 4 do begin
x4:=x2+Round(cos((45+l)*pi/180)*r3)*GetNt(n).a;
y4:=y2+Round(sin((45+l)*pi/180)*r3)*GetNt(n).b;
r4:=Round(SQRt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)));
r5:=Round(SQRt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)));
if (r4=r1) and (r5=r2) then begin
Showmessage(inttostr(x4)+' '+inttostr(y4));
break;
end;
end;
myDrawRect(x1,y1,x2,y2,x3,y3,x4,y4);


end;

end.
 
спасибо огромное, все работает ))
 
Назад
Сверху