Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2013, 22:51   #1
dimysss
Новичок
Джуниор
 
Регистрация: 28.11.2013
Сообщений: 2
По умолчанию Даны три точки с координатами (х1 , у1 ), (х2 , у2 ), (х3 , у3 ), которые являются вершинами некоторого прямоугольника

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, ComCtrls,clipbrd,math;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    Button4: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Chart1: TChart;
    Series1: TLineSeries;
    Edit8: TEdit;
    Edit9: TEdit;
    Label9: TLabel;
    Label10: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure button2click(sender:tobject);
             
                  procedure Button3Click(Sender: TObject);
                       procedure Button4Click(Sender: TObject);
             procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  myt=record a,b:integer; end;

var
  Form1: TForm1;
  xn, xk, x, y, h,n : extended;
  x1, x2, x3,y1,y2,y3  : extended;
  m, i, delt : integer;

implementation

{$R *.dfm}
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;
Function f(x: extended):extended;

  begin
     Result:=sin(x)/x;
     end;
     procedure TForm1.FormCreate(Sender: TObject);
      begin
        Edit1.Text:='0,1';
           Edit2.Text:='6';
               Edit3.Text:='50';
                   Edit4.Text:='0';
                     Edit5.Text:='6';
                           Edit6.Text:='-1';
                              Edit7.Text:='1';
      end;
      procedure TForm1.Button1Click(Sender: TObject);
       var r1,r2,r3,r4,r5,l,n,x4,y4: integer;
       hx, hy : extended;
       begin
         xn:=StrToFloat(Edit1.Text);
         xk:=StrToFloat(Edit2.Text);
         m:=StrToInt(Edit3.Text);
         x1:=StrToFloat(Edit4.Text);
          x2:=StrToFloat(Edit5.Text);
          x3:=StrToFloat(Edit6.Text);
          y1:=StrToFloat(Edit7.Text);
          y2:=strtofloat(edit8.text);
          y3:=strtofloat(edit9.text);
          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;

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
Что дальше то написать (zadanie: Даны три точки с координатами (х1 , у1 ), (х2 , у2 ), (х3 , у3 ), которые являются вершинами некоторого прямоугольника со сторонами, параллельными осям ко- ординат. Найти координаты четвертой точки.(Вывести на TImage этот прямоугольник.)

Помогите , дорогие программисты я " Недо - программист" Учусь только че-то вообще не прет (

Последний раз редактировалось Serge_Bliznykov; 28.11.2013 в 23:36.
dimysss вне форума Ответить с цитированием
Старый 29.11.2013, 00:58   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Такие задачки обычно в консоли делаются... И обычно без вывода... А прямоугольник можно и по 2м точкам построить.
Для тебя.
Код:
var
 x1, x2, x3, y1, y2, y3: integer; //имеющиеся точки
 posx, posy: integer; //искомая точка
begin
 //поиск
 if (x1>x2 and x1>x3)or(x1<x2 and x1<x3) then posx:=x1;
 if (x2>x1 and x2>x3)or(x2<x1 and x2<x3) then posx:=x2;
 if (x3>x2 and x3>x1)or(x3<x2 and x3<x1) then posx:=x3;
 if (y1>y2 and y1>y3)or(y1<y2 and y1<y3) then posy:=y1;
 if (y2>y1 and y2>y3)or(y2<y1 and y2<y3) then posy:=y2;
 if (y3>y2 and y3>y1)or(y3<y2 and y3<y1) then posy:=y3;
 //рисование
 Form1.Canvas.MoveTo(posx,posy);
 Form1.Canvas.LineTo(x1,y1);
 Form1.Canvas.LineTo(x2,y2);
 Form1.Canvas.LineTo(x3,y3);
 Form1.Canvas.LineTo(posx,posy);
end;
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 29.11.2013 в 01:07.
alextrof94 вне форума Ответить с цитированием
Старый 29.11.2013, 01:14   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Цитата:
Сообщение от dimysss Посмотреть сообщение
.. три точки с координатами (х1 , у1 ), (х2 , у2 ), (х3 , у3 ), которые являются вершинами некоторого прямоугольника со сторонами, параллельными осям ко- ординат. Найти координаты четвертой точки.
Вот если бы были не параллельными, тогда надо было вычислять. А здесь
x4 равно или x2 или x3 . Также и y.
Это зависит от того, в каком порядке обозначены вершины.
type_Oleg вне форума Ответить с цитированием
Старый 29.11.2013, 01:25   #4
dimysss
Новичок
Джуниор
 
Регистрация: 28.11.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вот если бы были не параллельными, тогда надо было вычислять. А здесь
x4 равно или x2 или x3 . Также и y.
Это зависит от того, в каком порядке обозначены вершины.
Ну а как- то это все записать? (
dimysss вне форума Ответить с цитированием
Старый 29.11.2013, 03:39   #5
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от dimysss Посмотреть сообщение
Ну а как- то это все записать? (
Как... Как? Я что зря распинался? Или ты неспособен увидеть в теме очевидный ответ? Я тебе написал код готовой функции, которая считает эту самую 4-ю точку и рисует на канве формы по координатам прямоугольник.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 29.11.2013, 09:56   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

доработанное решение (c) alextrof94

FindSquare.rar
Project5_exe.rar

суть решения в этом коде:
Код:

implementation
uses Math;

{$R *.dfm}

const
  koefX = 15;
  koefY = 15;

procedure TForm4.Button1Click(Sender: TObject);
var
 x1, x2, x3, y1, y2, y3 : integer; //имеющиеся точки
 posx, posy: integer; //искомая точка
 lBottomX, lBottomY, rTopX, rTopY : integer;
begin
  x1:=StrToInt(Edit1.Text);
  y1:=StrToInt(Edit2.Text);
  x2:=StrToInt(Edit3.Text);
  y2:=StrToInt(Edit4.Text);
  x3:=StrToInt(Edit5.Text);
  y3:=StrToInt(Edit6.Text);

 //поиск
 if ((x1>x2) and (x1>x3)) or ((x1<x2) and (x1<x3)) then posx:=x1;
 if ((x2>x1) and (x2>x3))or((x2<x1) and (x2<x3)) then posx:=x2;
 if ((x3>x2) and (x3>x1))or((x3<x2) and (x3<x1)) then posx:=x3;
 if ((y1>y2) and (y1>y3))or((y1<y2) and (y1<y3)) then posy:=y1;
 if ((y2>y1) and (y2>y3))or((y2<y1) and (y2<y3)) then posy:=y2;
 if ((y3>y2) and (y3>y1))or((y3<y2) and (y3<y1)) then posy:=y3;

 // вывод найденных координат
 Edit7.Text := IntToStr(posx);
 Edit8.Text := IntToStr(posy);

 // подготовка к рисованию - найдём координаты левого нижнего и правого верхнего углов
 lBottomX := min(min(x1,x2),min(x3,posx));
 lBottomY := min(min(y1,y2),min(y3,posy));
 rTopX := max(max(x1,x2),max(x3,posx));
 rTopY := max(max(y1,y2),max(y3,posy));

 //рисование
 Image1.Canvas.Pen.Color := clGreen;
 Image1.Canvas.Pen.Width := 2;


 lBottomX := lBottomX * koefX + Image1.Width div 2;
 rTopX := rTopX  * koefX + Image1.Width div 2;

 lBottomY := Image1.Height div 2 - lBottomY * koefY;
 rTopY := Image1.Height div 2 - rTopY * koefY;

 Image1.Canvas.Brush.Style := bsClear;
 Image1.Canvas.Rectangle(lBottomX, lBottomY, rTopX, rTopY);

end;

procedure TForm4.FormCreate(Sender: TObject);
begin
  // нарисуем оси координат
  Image1.Canvas.Pen.Color := clGray;
  Image1.Canvas.MoveTo(Image1.Width div 2,0);
  Image1.Canvas.LineTo(Image1.Width div 2,Image1.Height);
  Image1.Canvas.MoveTo(0,Image1.Height div 2);
  Image1.Canvas.LineTo(Image1.Width,Image1.Height div 2);

  Image1.Canvas.MoveTo(Image1.Width div 2 + 1*koefX, Image1.Height div 2 - 6);
  Image1.Canvas.LineTo(Image1.Width div 2 + 1*koefX, Image1.Height div 2 + 6);

  Image1.Canvas.MoveTo(Image1.Width div 2 - 6 , Image1.Height div 2 - 1*koefY);
  Image1.Canvas.LineTo(Image1.Width div 2 + 6, Image1.Height div 2 - 1*koefY);

end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На плоскости задано множество точек. Определить все тройки точек, которые являются вершинами прямоугольного треугольника Олечка12 Помощь студентам 11 22.04.2014 19:56
На оси ОХ даны три точки с действительными координатами. Вывести координаты двух точек, между которыми лежит третья (Паскаль) PASKAL12 Помощь студентам 6 08.10.2013 07:20
Числа вводятся по одному с клавиатуры. Определить сумму тех из них, которые являются парными и тех, которые являются нечетными. d_dima Помощь студентам 3 13.03.2013 12:19
Дано 3 точки своими координатами х,у. Будет ли они вершинами треугольника. Если да - найти периметр и площадь треугольника Arhi555 Паскаль, Turbo Pascal, PascalABC.NET 2 11.09.2012 17:46
Паскаль.Являются ли точки вершинами трапеции? Арсенчик Паскаль, Turbo Pascal, PascalABC.NET 49 18.05.2009 23:05