2016-05-16 3 views
0

Я уверен, что это основная тригонометрия, и я уверен, что я освещал школу много лет назад, но я не знаю, какую функцию можно применить к реальной ситуации в мире. Так или иначе, а не пытаться объяснить, что мне нужна помощь, я нарисовал небольшую диаграмму:Как найти две точки вдоль существующей линии

enter image description here

Я знаю, p1, p2, r1 и r2, но я не могу вспомнить (или знать, как поиск), как определить, что такое p3 и p4.

Основное приложение этой установки: у меня есть 2 круга (красный и синий), и мне нужно, чтобы они постоянно были связаны, когда я перетаскиваю их вокруг холста. Розовая ссылка свяжет их через их центральные точки, но я не хочу, чтобы линия проникала в окружность круга.

Надеюсь, что это имеет смысл? Заранее спасибо.

+0

Я голосую, чтобы закрыть этот вопрос не по теме, потому что речь идет о [math.se] вместо программирования или разработки программного обеспечения. – Pang

+0

Это не вне темы, и есть очень веская причина, по которой я разместил здесь, а не в Maths Exchange. Контекст предназначен для реализации JavaScript. Если бы я написал такой запрос в Math Exchange, я бы получил ответы, выраженные в уравнениях, используя математическую нотацию. Я бы не понял, как реализовать ответ. Задав его здесь, я бы удостоверился, что он выражен в кодовой нотации. Я исключил информацию о том, какой язык я использую, потому что это не имеет значения. Я думаю, что ответы, оставленные людьми, будут полезны другим, кто сталкивается с этой проблемой математики в JS. – jayfield1979

ответ

1

это не простой вектор математика (нужна не тригонометрий)

  1. создать единичный вектор v с P1 в P2 направления

    это легко в векторной форме:

    v=P2-P1; v/=|v| 
    

    И если положить в 2D:

    v.x=P2.x-P1.x; 
    v.y=P2.y-P1.y; 
    l=sqrt((v.x*v.x)+(v.y*v.y)) 
    v.x/=l; 
    v.y/=l; 
    
  2. Теперь просто перевести с P1,P2 по r1,r2

    векторной форме:

    P3=P1+r1*v 
    P4=P2-r2*v 
    

    В 2D:

    P3.x=P1.x+r1*v.x; 
    P3.y=P1.y+r1*v.y; 
    P4.x=P2.x-r2*v.x; 
    P4.y=P2.y-r2*v.y; 
    

enter image description here

+0

Благодарим вас за ваше время (и усилием с вашей диаграммой). Я выбрал ваш ответ, поскольку работаю лучше в векторном совпадении, и я использую векторную систему для моего рисунка. – jayfield1979

1

Вы должны решить следующую систему уравнений:

Для р3 ->

(X-p1x)/(p1x-p2x)=(Y-p1y)/(p1y-p2y) 
(X-p1x)^2 + (Y-p1y)^2 = r1^2 

То же самое для p4 просто изменить r1 для r2 и p1 для p4 во втором уравнении.

Первое уравнение - это уравнение линии, заданное двумя точками. И второе уравнение - это уравнение окружности, заданное центральной точкой и радиусом.

Полученные значения X, Y будут значениями p3, а затем p4.

1

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

Вы знаете точки P1, P2 и радиус R1 и R2. Скажем, что точки P1 и P2 имеют координаты (x1, y1) и (x2, y2) соответственно.

Линия, соединяющая P1 и P2, является прямой линией и, следовательно, вы можете рассчитать наклон линии, используя формулу m=(y2-y1)/(x2-x1). Поскольку вы знаете наклон и знаете две координаты, вы можете рассчитать перехват c и построить формулу формы y=mx+c.

Как только формула линии существует, вы можете применить значения для x и вычислить y для точки P3, скажем x3 и y3, так как у вас есть радиус R1. Аналогичным образом вычислите координаты для P4.

+0

Спасибо за ваше время, не могли бы вы уточнить, что «c» находится во второй части формулы: «y = mx + c»? Благодарю. – jayfield1979

+0

@ jayfield1979 это строка 'y' позиция, когда' x = 0' (смещение по строке) из стандартного уравнения линии. Такой подход не будет работать для вертикальных линий и будет терять точность для случаев, когда '| dy | >> | dx |'. Для этого лучше использовать векторный и или параметрический подход. – Spektre

1

Пусть Б расстояние между p1 (x1, y1) и p2 (x2, y2)
Таким образом, д = SQRT ((x1-x2)^2 + (Y1-Y2)^2)
Теперь точка р3 (х3, у3) делит линию между p1 и p2 в соотношении r1: (d-R1)

Таким образом
x3 = (r 1 * х2 + (г-г1) * x1)/д и
у3 = (r 1 * у2 + (г-г1) * у1)/д

Аналогично для p4 (x4, у4)
x4 = (r 2 * x 1 + (г-г2) * х2)/г и
у4 = (г2 * у1 + (г-г2) * у2)/д

Смежные вопросы