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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2014, 22:46   #1
woojin
Пользователь
 
Регистрация: 20.10.2013
Сообщений: 32
Вопрос рисование с шагом

есть отрезок который может быть нарисован под любым углом и может быть
любой длины всё завит от начальных и конечных координат

координаты конца отрезка могут быть как больше координат начала так и
меньше

надо, вне зависимости от длины отрезка и его направленности (по
отношению к начальной точке), вычислить координаты N точек от конца
отрезка с определённым шагом (к примеру шаг 10-20 пикселей)

вот что получилось у меня
Код:
delta := (15-count)/15;
x := start.X+delta*(stop.X-start.X);
y := start.Y+delta*(stop.Y-start.Y);
count - количество N точек
15 - максимум частей на которые можно поделить отрезок (может быть
больше)
delta - результат
start.X, start.Y - начальная координата
stop.X, stop.Y - конечная координата
x,y - координата получившейся точки

проблема у моего способа в том что при увеличении/уменьшении длины
отрезка, изменяются и выходные координаты (x,y)

P.S. на всякий случай вычисляю длину отрезка по формуле
Код:
l := SQRT(sqr(stop.X - start.X) + sqr(stop.Y - start.Y));
woojin вне форума Ответить с цитированием
Старый 16.01.2014, 16:04   #2
woojin
Пользователь
 
Регистрация: 20.10.2013
Сообщений: 32
По умолчанию

если кому понадобится:
Код:
function MoveArrow(start, stop: TPointF; count: integer): TPointF;
var
  len: integer;
  delta, x, y: single;

begin
  len := 17; //смещение

  y:=(stop.Y - start.Y);
  x:=(stop.X - start.X);
  delta:=ArcTan2(y, x);

  Result.X := stop.X - cos(l2) * len * count;
  Result.Y := stop.Y - sin(l2) * len * count;
end;
и ещё вариант
Код:
function MoveArrow(start, stop: TPointF; count: integer): TPointF;
var
  len: integer;
  l, x, y: single;

begin
  len := count * 17;  //шаг * смещение
  l := SQRT(sqr(stop.X - start.X) + sqr(stop.Y - start.Y));
  x := stop.X - len * (stop.X-start.X) / l;
  y := stop.Y - len * (stop.Y-start.Y) / l;
  Result.X := x;
  Result.Y := y;
end;
woojin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Розенброка с дискретным шагом Дмитрий Дёмин Паскаль, Turbo Pascal, PascalABC.NET 2 10.12.2012 11:34
Копирование и траспонирование с шагом OgE®_M@G Microsoft Office Excel 6 26.03.2012 12:35
Протянуть формулу с шагом sergantikus Microsoft Office Excel 3 23.03.2012 11:59
updown c не целым шагом MOMOTOCHEK Помощь студентам 4 16.03.2011 19:18
Формирование списка с определенным шагом 23i Microsoft Office Excel 3 07.06.2010 09:14