2015-08-03 5 views
-1

У меня проблема. Я пытаюсь решить его в течение 2 дней. Но я не знаю. Это может быть что-то простое, но просто я не знаю, на данный момент & всякая помощь приветствуется.Нарисуйте линию фиксированной длины от фиксированной начальной точки до конечной точки

Я хочу сделать линию от A (x1, y1) до B (x2, y2) фиксированной длины.

A.............B 
A....B........ 
A............. B 

Я сделал мобильный бомбардир крикета. В отчетах он создает колесо вагона. Поскольку он используется с мобильного телефона, человек не очень точен, и люди не всегда касаются граничной линии (темный оранжевый круг на изображении ниже).

Но когда я создаю отчет в PHP, я должен нарисовать линию от фиксированной начальной точки до граничной линии в том направлении, в котором они касались.

Прямо сейчас мой WAGON WHEEL выглядит так.

enter image description here

Я перепробовал много способов сделать это, но все потерпели неудачу. Теперь моя следующая идея состоит в том, чтобы нарисовать линию фиксированной длины от фиксированной начальной точки (стороны ватин) до координаты касания, но с фиксированной длиной, чтобы линия всегда заканчивалась на граничной линии независимо от того, является ли касание пользователя неточным.

можно рассчитать расстояние между начальной точкой и точкой касания, используя это в PHP

$lineLength = round(sqrt (pow(($wicketX-$x),2) + pow(($wicketY-$y),2)), 2); 

Но я не знаю, как дальше регулировать сенсорные координаты до требуемой длины

Пожалуйста, пожалуйста, пожалуйста, помогите ,

P.S. Этот вопрос выглядел примерно так, но я понял. Моя математика - неделя Calculate a point along the line A-B at a given distance from A

+0

Если А является центром, АВ не является «фиксированной длины». –

+0

Может быть, я не правильно объяснил вопрос, но я не мог получить правильный ответ.Я хотел найти новый пункт в той же строке. Я, наконец, использовал эту формулу, чтобы найти точку 3. 'code' $ x3 = $ x2 + ($ x2 - $ x1)/$ lineLength * $ newLineLength; $ y3 = $ y2 + ($ y2 - $ y1)/$ lineLength * $ newLineLength; – Sallu

+0

КАК я могу, пожалуйста, закрыть этот вопрос. – Sallu

ответ

0

Я понимаю, что вы хотите найти пересечение линии через точки A и B с кругом. Не обязательно быть центром.

Пусть центр круга имеет координаты (Xc, Yc), а радиус - R.

Любая точка вдоль АВ может быть записана в виде

X = Xa + t (Xb - Xa) = Xc + (Xa - Xc) + t (Xb - Xa) = Xc + Xca + t Xab 
Y = Ya + t (Yb - Ya) = Yc + (Ya - Yc) + t (Yb - Ya) = Yc + Yca + t Yab 

Вы подключаете, что в уравнении окружности

(X - Xc)² + (Y - Yc)² - R² = (Xca + t Xab)² + (Yca + t Yab)² - R² 
          = (Xab² + Yab²) t² + 2 (Xca Xab + Yca Yab) t + Xca² + Yca² - R² 
          = 0 

Это второе уравнение степени, что вам нужно решить для t. Используйте решение с положительным t, оно находится на стороне B. От t, вычислите (X, Y).


Обратите внимание, что если А является центром, уравнение тривиально сводится к

(Xab² + Yab²) t² = R²