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

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

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

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 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,499
По умолчанию

Цитата:
Сообщение от 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