2017-01-31 3 views
-1

enter image description hereВращение точек в Android

У меня есть точка A, B и ширина CD (A»= A). Если пользователь переместит точку B в B'how, я смогу знать координаты точек C 'D'. Я был бы очень признателен, если бы кто-то написал метод в java с 3 входными параметрами (A, B и шириной CD), которые выводят координаты C 'и D'. В качестве вознаграждения я могу заплатить 50 $ через Paypal.

+0

Попробуйте Fiverr или Upwork. Это сайт вопросов и ответов для профессиональных программистов! – OBX

+0

Привет. Я сам программист. Мне нужна помощь в этой задаче. – Jumper

+0

Являются ли они в 2D или 3D координатах? –

ответ

0

фона:

Во-первых, если я правильно понимаю, задача на самом деле «даны координаты А и В, найти координаты C и D, если известно, что АВ и CD перпендикулярны, и мы знаем, длина CD»

Для вычисления координат, мы используем 3 основные математические уравнения:

  • линия от 2 точек A, B: y = (x - B.x)* (A.y - B.y)/(A.x - B.x) + B.y

    Если мы устанавливаем m = (A.y - B.y)/(A.x - B.x)

Уравнение из 2 точек A, B будут: y = m * (x - B.x) + B.y

  • линия, перпендикулярная с линией выше (CD): y = (-1/m) * x + y0

Поскольку CD проходит через A, уравнение можно записать в виде: y = (-1/m) * (x - A.x) + A.y

  • Длина (d) между 2 точками A, C: d * d = (C.x - A.x) * (C.x - A.x) + (C.y - A.y) * (C.y - A.y)

Из уравнения CD, мы знаем C.y = (-1/m)*(C.x - A.x) + A.y

Поэтому: d*d = (C.x - A.x)*(C.x - A.x) + (1/(m*m))*(C.x - A.x)* (C.x - A.x)

легко узнать, что C.x - A.x = (+|-) (m*d)/Math.sqrt(m*m + 1)

В java, я думаю, вы можете написать функцию

public Point[] findCD(Point A, Point B, int widthCD) { 
    if (A.x == B.x) { 
     return [new Point(A.x - widthCD/2, A.y), new Point(A.x + widthCD/2, A.y)] 
    } 
    if (A.y == B.y) { 
     return [new Point(A.x, A.y - widthCD/2), new Point(A.x, A.y + widthCD/2)] 
    } 

    var m = (A.y - B.y)/(A.x - B.x); 

    var xC = A.x - m*widthCD/(2 * Math.sqrt(m*m + 1)); 
    var xD = A.x + m*widthCD/(2 * Math.sqrt(m*m + 1)); 

    var yC = (A.x - xC)/m + A.y; 
    var yD = (A.x - xD)/m + A.y; 

    return [new Point(xC, yC), new Point(xD, yD)]; 
} 

Примечание: У меня нет Java, пожалуйста, поправьте, если я пишу указатель или массив неправильно

+0

Спасибо, он должен быть +, а не. Я отредактировал его. –

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