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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2010, 13:55   #1
tunyash
Пользователь
 
Регистрация: 03.05.2008
Сообщений: 25
По умолчанию Определение точки основания перпендикуляра

Доброго времени суток.
Я пытаюсь создать небольшую игру и столкнулся с тем, что не умею определять координаты точки основания перпендикуляра. Известна точка, из которой нужно провести перпендикуляр и координаты концов отрезка, находящегося на данной прямой. Подскажите, пожалуйста, формулу по которой можно определить координаты точки. Заранее спасибо.
tunyash вне форума Ответить с цитированием
Старый 26.06.2010, 18:03   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Такое?


Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure line(x1,y1,x2,y2: integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x1, x2, y1, y2: integer;  //прямая
  xn1, yn1, xn2, yn2: real; //перпендикуляр

implementation

{$R *.dfm}

procedure TForm1.line(x1,y1,x2,y2: integer);
begin
  Canvas.MoveTo(x1,y1);
  Canvas.LineTo(x2,y2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  x1 := 100;
  y1 := 100;
  xn1 := 200;
  yn1 := 200;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Pen.Color := clBlack;
  line(x1, y1, x2, y2);
  Canvas.Pen.Color := clBlue;
  line(round(xn1), round(yn1), round(xn2), round(yn2));
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  x2 := x;
  y2 := y;
  try
    xn2:=(x1*sqr(y2-y1) + xn1*sqr(x2-x1) + (x2-x1) * (y2-y1) * (yn1-y1)) / (sqr(y2-y1)+sqr(x2-x1));
    yn2:=(y2-y1)*(xn2-x1)/(x2-x1)+y1;
  except
  end;
  Repaint;
end;
end.
пыщь
JTG вне форума Ответить с цитированием
Старый 26.06.2010, 19:09   #3
tunyash
Пользователь
 
Регистрация: 03.05.2008
Сообщений: 25
По умолчанию

Спасибо, помогло=)
tunyash вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение точки в трехмерной сцене F1Book Мультимедиа в Delphi 0 26.05.2009 11:45
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Определение принадлежности точки к сектору. Vistar Паскаль, Turbo Pascal, PascalABC.NET 12 09.05.2009 20:46
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57