2011-03-11 49 views
1

我正在爲2D幾何數據寫一個轉換器。我必須轉換的一個元素是弧。在源系統中,弧用兩個軸對齊的矩形來描述。第一個矩形是圓弧所在圓的邊界框。第二個矩形是弧本身的邊界框。約束條件是,弧的邊界框必須與圓的邊界框的兩條邊相交。我知道每個矩形的左上角和右下角的座標。圓和軸對齊的矩形之間的交點

目標系統描述如下的圓弧:矩形是圓弧所在圓弧的一個邊界框。到目前爲止,它與上述相同。然後我有兩個點指定弧的起點和終點。兩個點必須完全位於該圓的「邊緣」上。

問題是:您是否看到一種簡單的方法來計算弧的起點和終點?我已經看到this question,但它似乎很複雜。或許有這樣做的更簡單的方法...

我的想法至今:

看來我必須計算出圓弧與圓外接矩形框的邊緣的交叉點。有兩種情況是可能的(由於上述限制):只有一條邊與圓相交,或者兩條邊與圓相交。另外所有其他邊緣總是在圓外。

更新:開始點和結束點將圓切成兩部分。這兩個部分中的哪一個被繪製爲弧,由起點和終點的順序決定。始終從起點到終點逆時針繪製圓弧。

+0

「只有一條邊與圓相交」時是這種情況嗎? – 2011-03-11 13:05:09

+0

另外,圓的邊界框是一個正方形,不是嗎? (也許我錯過了一些重要的東西!) – 2011-03-11 13:06:35

+0

@belisarius:你說得對,圓圈的邊框是方形的。但是第二個邊界框可以在大多數情況下是一個矩形。 「只有一條邊與圓相交」的情況是邊與圓相交兩次。圓弧終點將具有相同的x或y座標。 – McNumber 2011-03-11 18:54:58

回答

1

調用外框座標topleft, bottomright。圓心和半徑然後:

centre.x = (left + right)/2 
centre.y = (top + bottom)/2 
radius = (right - left)/2 

由此我們可以寫一個方程必須滿足上一圈周長的所有點:

(x - centre.x) * (x - centre.x) + (y - centre.y) * (y - centre.y) = radius * radius 

內盒座標給你的x可能值和y。一次替換一個並作爲標準解決quadratic equation。如果有一個真正的解決方案,並且相應的點在內框的範圍內,那就是一個點。考慮到原始數據的限制,你應該發現有兩點 - 那就是你的答案。

+0

非常感謝,這是一個很好的解決方案。我已經實施了它。目前我正在與一些小問題作鬥爭,但這些問題應儘快解決。 – McNumber 2011-03-11 18:56:52