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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2013, 21:15   #1
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию из точки А в точку Б

Есть точка А с заданными координатами (x1;y2) и точка Б (x2;y2)
Мне нужно точку А переместить в точку Б. Как мне получить промежуточные координаты движения точки А по прямой к точке Б?
То есть через какие координаты должна пройти точка А, двигаясь по прямой к точке Б?

Вроде не очень сложная задачка, но чет заступорился я.
На любом языке можно, хоть просто формулу с небольшими пояснениями.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 26.07.2013, 21:29   #2
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Построим вектор, начало которого точка А, конец - точка Б. Уменьшаем вектор до нужных размеров и, прибавляя его координаты к точке А, находим промежуточные. Чем сильнее "укоротите" вектор, тем больше будет у Вас промежуточных точек.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 27.07.2013, 00:13   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Еще вариант - познакомиться с алгоритмами Брезенхема.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.07.2013, 05:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я, в принципе согласен с предложенными выше вариантами,
хочу от себя 5 копеек добавить...

Цитата:
То есть через какие координаты должна пройти точка А, двигаясь по прямой к точке Б?
сколько шагов должно быть?
находите разницу между ординатами и абциссами и делите её на количество шагов.
Получаете приращение по соответствующим осям.
прибавляя приращение, получаете промежуточные координаты.
примерно так (на Паскале иллюстрация):
Код:
var 
   X1,X2, Y1,Y2,
   DeltaX, DeltaY : double;
   i, CountStep : integer
begin
   { вводим координаты точек X1,Y1, X2,Y2 }
   Readln(X1,Y1, X2,Y2);

  CountStep := 3; {три шага, причём третьим мы уже придём в пункт назначения }
  DeltaX := (X2 - X1) / CountStep;
  DeltaY := (Y2 - Y1) / CountStep;
  XPath := X1;
  YPath := Y1;
  for i:=1 to CountStep do begin
    XPath := XPath + DeltaX;
    YPath := YPath + DeltaY;
    WriteLn('Шаг ',i,' координаты точки маршрута: ',DeltaX:0:5,' ', DeltaY:0:5);  
  end;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.07.2013, 05:37   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я, в принципе согласен с предложенными выше вариантами,
хочу от себя 5 копеек добавить...

Цитата:
То есть через какие координаты должна пройти точка А, двигаясь по прямой к точке Б?
сколько шагов должно быть?
находите разницу между ординатами и абциссами и делите её на количество шагов.
Получаете приращение по соответствующим осям.
прибавляя приращение, получаете промежуточные координаты.
примерно так (на Паскале иллюстрация):
Код:
var 
   X1,X2, Y1,Y2,
   DeltaX, DeltaY : double;
   i, CountStep : integer
begin
   { вводим координаты точек X1,Y1, X2,Y2 }
   Readln(X1,Y1, X2,Y2);

  CountStep := 3; {три шага, причём третьим мы уже придём в пункт назначения }
  DeltaX := (X2 - X1) / CountStep;
  DeltaY := (Y2 - Y1) / CountStep;
  XPath := X1;
  YPath := Y1;
  for i:=1 to CountStep do begin
    XPath := XPath + DeltaX;
    YPath := YPath + DeltaY;
    WriteLn('Шаг ',i,' координаты точки маршрута: ',DeltaX:0:5,' ', DeltaY:0:5);  
  end;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.07.2013, 06:49   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Мой вариант: Используя школьный курс математики можно утверждать, что двух координат достаточно для построения уравнения линии вида y=kx+b. Находите коэффииценты и таким образом решение сведется к посту #2. Либо просто в цикле с приращением следуете по данному уравнению.
Нахождение уравнения:
http://www.math.by/geometry/eqline.html
http://ru.wikipedia.org/wiki/Прямая
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.07.2013, 09:32   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Utkin
Цитата:
Мой вариант: Используя школьный курс математики можно утверждать, что двух координат достаточно для построения уравнения линии вида y=kx+b. Находите коэффииценты и таким образом решение сведется к посту #2. Либо просто в цикле с приращением следуете по данному уравнению.
А если уравнение прямой записать в полярной системе координат?
Не пробовали?

Дело в том, что при использовании уравнения прямой вида y=kx+b перемещения точки будут нормально смотреться для перемещений под углом до 45 град. При использовании полярной системы координат ...

Надо либо определиться с приращениями [пост 2], но тогда точка А может и не прийти в точку Б точно [потребуются вычисления с вещественными числами и дополнительная коррекция координат на последнем шаге], либо воспользоваться моим замечанием.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.07.2013, 14:20   #8
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Через уравнение прямой в одном из видов.
Канонический вид: Ax+By+C=0
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 28.07.2013, 23:28   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
А если уравнение прямой записать в полярной системе координат?
Не пробовали?
Не, не пробовал. У меня экран с обычными координатами.
Цитата:
Надо либо определиться с приращениями [пост 2], но тогда точка А может и не прийти в точку Б точно [потребуются вычисления с вещественными числами и дополнительная коррекция координат на последнем шаге], либо воспользоваться моим замечанием.
Можно округлять и ставить не равенство конкретным координатам, а некоторой области, не отличающейся от заданной на опредленную единицу.
С другой стороны, нечего там робовать. Поскольку уравнение кривой собирается из обоих коорднат, Вы гарантированно попадете в точку Б. Вопрос лишь в том, что считать точкой Б.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двигать курсор из точки А в точку Б bagos Общие вопросы Delphi 8 20.01.2011 02:06
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 22:47
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
tchart - Как при наведении курсора на определенную точку сериэса узнать точку наведения и отобразить её xaero93 Помощь студентам 0 22.04.2009 19:28
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57