Как вычислить траекторию на PHP?

1. Виталий (04.01.2012 / 19:43)
Простите, что в школьные времена прогуливал уроки по физике и теперь задаю столь глупые вопросы.
Вопрос относится не чисто к php. как таковой код я набросаю, мне необходим пинок в верную сторону.
И так задача:
У меня есть плоскость (500x500 пикселей).
На плоскости две точки, условно обозначим их точками A и B.
Задача заключается в том что точка B должна двигаться к точки A при чем при каждом запуске скрипта на шаг ближе (пусть это будет ~10px).
в общем сама задача как рассчитать траекторию в каком направлении двигаться точки B по осям x и y?

Заранее благодарю вас за то что вы сидели на уроках smile

2. Виталий (04.01.2012 / 19:56)
паходу все прогуливали smile

3. ramzes (04.01.2012 / 20:09)
Координаты точек А и В то есть?

4. Hennessy (04.01.2012 / 20:10)
У тебя есть координаты точки А? Есть координаты точки Б? Делай задачу, чтобы Б постепенно переходило к точке А. Вот и всё.

Добавлено через 00:28 сек.
Ну т.е. Зная координаты вычисления проводишь сколько нужно и т.д. и прибавляешь\убавляешь дистанцию.

5. Виталий (04.01.2012 / 20:26)
Hennessy (4 Января 2012 / 20:10)
У тебя есть координаты точки А? Есть координаты точки Б? Делай задачу, чтобы Б постепенно переходило к точке А. Вот и всё.

Добавлено через 00:28 сек.
Ну т.е. Зная координаты вычисления проводишь сколько нужно и т.д. и прибавляешь\убавляешь дистанцию.
это сработает только запустив два цикла и сначала сдвинутся в сторону координаты x точки Аа потом сдвигаться к точке y во вложеном цикле. но согласись получится некрасиво хоть и дойдет до цели.

я кажется понял что нужно делать. просто вычесть коефициент шага здесь и вступает еще один параметр скорости. думаю сейчас реализую.

6. ramzes (04.01.2012 / 20:29)
$c[x] = ($a[x]<$b[x]) ? ($a[x]+5] : ($a[x]-5);
$c[y] = ($a[y]<$b[y]) ? ($a[y]+5] : ($a[y]-5);
$c[x] = ($c[x] > $b[x]) ? $b[x] : $c[x];
$c[y] = ($c[y] > $b[y]) ? $b[y] : $c[y];
координаты движения $c[x] и $c[y]
это так не думая, примерный вариант

7. Виталий (04.01.2012 / 20:35)
6. ramzes, прокрутил код в голове. поидее он пройдет по диагонале в сторону к точке A а потом тупо по прямой дойдет свой путь по оси на которую наткнулся.
не сойдет. sad

Добавлено через 01:33 сек.
что то в голове крутится но не могу разобратся что =/ печально

8. Павел (04.01.2012 / 20:41)
7. free, не держи в голове, рисуй. возьми листок и нарисуй, помогает.

9. Виталий (04.01.2012 / 20:43)
8. GingerBread, ууу.. два листка исписано вроде бы правильно но теперь понять что написал запара... хотел отсканить и скинуть но понял что сканер закидан )

10. ramzes (04.01.2012 / 20:43)
7. free, да, я там не учел кое что, а именно длинну шага.
вместо +5 надо задать длину шага
которую надо изначально высчитать, до старта, из расчета скажем, расстояние по оси Х от точки А до точки В деленное на кол-во шагов
и так же для оси У
примерноsmile

11. Виталий (04.01.2012 / 20:51)
10. ramzes, не не не... если запустишь свой код, я это в уме сделал то получится что он идет по диагонали (в 45 градусов) в сторону точки A пока не наткнется на вторую ось а по ней начнет шагать дальше последнии два условия в твоем коде. ведь согласись точка A может находится не обязательно в 45 градусов. smile

я сейчас пытаюсь делить на 500 (ширина и высота плоскости) и находить соотношение осей.

Добавлено через 08:37 сек.
еще не пробовал но вот как то так по идее.
$aKx = $a['x'] / 500;
$bKx = $b['x'] / 500;
                
$aKy = $a['y'] / 500;
$bKy = $b['y'] / 500;
                
$speed = 5;
$cX = ($a['x'] < $b['x']) ? ($b['x']-($bKx*$speed)) : ($b['x']+($bKx*$speed));
$cY = ($a['y'] < $b['y']) ? ($b['y']-($bKy*$speed)) : ($b['y']+($bKy*$speed));


12. Виталий (04.01.2012 / 21:14)
у меня почему то сервер падает когда я его запускаю obana
в чем проблема может быть? сижу на nginx'e

13. ramzes (04.01.2012 / 21:15)
11. free, с той поправкой про которую я в #10 говорил, он будет идти под любым углом в любое направление
вроде быsmile
ну ладно, мне лень думать)))

Добавлено через 01:39 сек.
free (4 Января 2012 / 21:14)
у меня почему то сервер падает когда я его запускаю obana
в чем проблема может быть? сижу на nginx'e
ты это в цикле запускаешь?)))
ясен пень падает)))) там пипец какой цикл получится

14. Виталий (04.01.2012 / 21:18)
все разобрался.

Добавлено через 01:23 сек.
13. ramzes, да не цикла нет. один шаг при обработке скрипта.
проблема была в подключении к бд.

15. ramzes (04.01.2012 / 21:26)
14. free, если я правильно понял, у тебя
$aKx = $a['x'] / 500;
$bKx = $b['x'] / 500;
$aKy = $a['y'] / 500;
$bKy = $b['y'] / 500;
При каждом шаге выполняется?

16. Виталий (04.01.2012 / 21:42)
ну собственно да. оно вычисляет соотношение координаты от самого периметра плоскости )
все работает отлично.

17. Дмитрий (04.01.2012 / 23:20)
Тут не только физика надо, теоретически вычисляешь расстояние между точками, по какой оси они будут передвигатся, делишь расстояние приближения на общее расстояние между точками и получишь соотношение сторон как то так... smile

18. Дмитрий (05.01.2012 / 00:24)
<?php
#Допустим, координаты точки ОТПРАВЛЕНИЯ такие:
$Bx = 130; #по ширине
$By = 60; #по высоте

#Допустим, координаты точки НАПРАВЛЕНИЯ такие:
$Ax = 30; # по ширине
$Ay = 70; # по высоте

#Вычисляем координаты средней точки направления по ширине:
$Sx = ( ($Bx - $Ax) / 2 ) + $Ax; # получится  ( (130 - 30) / 2 ) + 30 = 80

#Вычисляем координаты средней точки направления по высоте:
$Sy = ( ($By - $Ay) / 2 ) + $Ay; # получится  ( (60 - 70) / 2 ) + 70 = 65

# Если коор. высоты средней точки больше коор. высоты точки отправления, значит двигаться надо вверх, в противном случае - вниз.
$Ry = ($Sy != $By) ? ( ($Sy > $By) ? 'вверх' : 'вниз' ) : '';

# Если коор. ширины средней точки больше коор. ширины точки отправления, значит двигаться надо влево, в противном случае - вправо
$Rx = ($Sx != $Bx) ? ( ($Sy > $By) ? 'влево' : 'вправо' ) : '';

# вычислять градус тупо некогда
$corner = 0;

# результат на экран
echo 'Двигаться нужно ' . $Rx . ' ' . $Ry . ' под углом ' . $corner . '&deg;';
вычислять градус направления, расстояние между точками, количество шагов и координаты каждого шага тупо некогда krut

Этот скрипт отдаст:
Двигаться нужно влево вверх под углом 0°


19. Виталий (05.01.2012 / 09:03)
18. dima.london, спасибо, но я вчера разобрался уже. smile

URL: https://visavi.net/topics/28066