![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Дана ось координат XY. На оси координат задаются две точки с координатами (начало отрезка и конец отрезка). По этим двум точкам построить прямую и определить, проходит ли это прямая через начало координат (0,0).
В общем, ось координат я построил. Не могу начертить прямую через координаты точки и как определить проходит ли это прямая через начало координат. Код на текущий момент прилагаю: Код:
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls; type TForm2 = class(TForm) Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; Edit4: TEdit; Button1: TButton; Button2: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Clear; procedure FormCreate(Sender: TObject); procedure N2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; x,y,x1,y1,x2,y2: integer; // Координаты точек implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin x:=250; // Начало координат (условно X=0) y:=250; // Начало координат (условно Y=0) x1:=StrToint(Edit1.Text); // Координата X первой точки y1:=StrToInt(Edit2.Text); // Координата Y первой точки x2:=StrToInt(Edit3.Text); // Координата X второй точки y2:=StrToInt(Edit3.Text); // Координата Y второй точки Image1.Canvas.MoveTo(x+x1,y-y1); // Отмечаем на оси XY первую точку Image1.Canvas.MoveTo(x+x2,y-y2); // Отмечаем на оси XY вторую точку точку // Как дальше???? end; procedure TForm2.Button2Click(Sender: TObject); begin Clear; // Нажатием кнопки "Очистить" возвращаем все в первоначальное состояние end; procedure TForm2.Clear; var i, k:integer; begin Image1.Canvas.Pen.Width:=1; Image1.Canvas.pen.Color:=clBlack; image1.Canvas.Brush.Color:=clwhite; image1.Canvas.Rectangle(0,0,500,500); image1.Canvas.MoveTo(250,0); image1.Canvas.LineTo(250,500); image1.Canvas.MoveTo(0,250); image1.Canvas.LineTo(500,250); k:=50; for i:=1 to 9 do begin image1.Canvas.MoveTo(247,k); image1.Canvas.LineTo(254,k); image1.Canvas.MoveTo(k,247); image1.Canvas.LineTo(k,254); image1.Canvas.TextOut(k-9,257,inttostr(k-250)); if k<>250 then image1.Canvas.TextOut(223,k-7,inttostr(-k+250)); k:=k+50; end; end; procedure TForm2.FormCreate(Sender: TObject); begin Clear; // Процедура построения оси координат end; end. |
#2
|
||||
|
||||
![]() линия рисуется вот так:
moveto(x1,y1) lineto(x2,y2) а определить проходит она через точку с координатами (0,0) проверяешь через это уравнение: (x-x2)/(x1-x2)=(y-y2)/(y1-y2) подставив вместо выделенного нули, проверяешь равенство. Если выполняется, то линия проходит через начало координат |
#3
|
||||
|
||||
![]() Зачем здесь x и y?
Код:
Image1.Canvas.MoveTo(x+x1,y-y1); // Отмечаем на оси XY первую точку Image1.Canvas.MoveTo(x+x2,y-y2); // Отмечаем на оси XY вторую точку точку Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |