2016-09-15 4 views
0

В названии говорится все. Учитывая, дуга с (например):Для дуги с известным началом (x, y), end (x, y) и углом, как я могу вычислить его ограничивающий прямоугольник?

Start Point: x = 53.34, y = 52.07 
End Point: x = 13.97, y = 52.07 
Angle: 180 degrees 

enter image description here Как я могу найти свою ограничительную рамку?

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

Спасибо!

-Tom

+0

Информация (начальная точка, конечная точка, угол) не однозначно определить дугу. В вашем примере это может быть и другая половина круга (или для этого угла будет -180?). – CristiFati

+0

В этом случае могу ли я предположить, что положительный угол всегда означает конкретное направление? (т. е. угол = -180 для другой половины круга) –

+0

Я думаю, что [MathOverflow] (http://mathoverflow.net) или [Math] (http://math.stackexchange.com) будет более уместным места для этого вопроса. В качестве ответа на ваш вопрос: я полагаю, вы можете. Но для того, чтобы быть строгим, используйте значения положительного угла для тригонометрических (против часовой стрелки) углов. – CristiFati

ответ

1
h = Sqrt((start.x - end.x)^2 + (start.y - end.y)^2) 
or 
h = Math.Hypot(start.x - end.x, start.y - end.y) 

R = Abs(h/(2*Sin(Angle/2))) 

if angle <= Pi/2 
    top = end.y 
    left = end.x 
    bottom = start.y 
    right = start.x 
else if angle <= Pi 
    top = start.y - R 
    left = end.x 
    bottom = start.y 
    right = start.x 
else if angle <= 3*Pi/2 
    top = start.y - R 
    left = start.x - 2*R 
    bottom = end.y 
    right = start.x 
else 
    top = start.y - R 
    left = start.x - 2*R 
    bottom = start.y + R 
    right = start.x 
+0

Удивительный! моя версия python: http://www.tutorialspoint.com/execute_python_online.php?PID=0Bw_CjBb95KQMSElRZk90cnh4dWs –

+0

На самом деле, я не уверен, что он работает - я ожидаю увидеть разницу между верхней и нижней (высота ограничивающей рамки) до 39.370. –

+0

Для вашего примера R = (53.34-13.97) /2=39.37/2=19.685 - это высота окна. Ширина составляет 39,37. – MBo