2014-03-14 38 views
0

我試圖獲得弧的座標(用藍色表示)(以便我可以直觀地繪製它們[在Android path.drawArc()]任何2(並最終$ n $)圈爲'中央'部分(用紅色表示)。Java圓相交 - 中心部分

here's a representation

我發現this,但遺憾的是我不能在所有的數學頭腦!

我編碼的東西找到交點...如果有幫助?

回答

0

我看到沒有path.drawArc(),只有Canvas.drawArcPath.addArcPath.arcTo。所有這些需要一個RectF oval參數,我會猜測描述了圓的大小和位置。因此,如果要繪製透鏡形區域的右邊界,則這屬於左圓的邊界,因此您將oval設置爲左圓的邊界框。那麼你需要兩個角度,startAnglesweepAngle。您可以從Math.atan2(y, x)中獲取它們,其中(x, y)是從圓心指向其中一個交點的向量。因此瞭解這些交點將非常有用。您將使用一個來計算起始角度,而另一個則使用第一個弧線的結束角度。掃描角度只是結束和開始之間的差異。對於第二個弧,請將開始和結束的角色顛倒過來,然後您將獲得基本封閉的路徑,不過您可能必須發出明確的close調用才能使該閉包顯式化。

另一種方法是使用Path.op(circle1, circle2, Path.Op.INTERSECT)circle1circle2可由Path.addCircle組成。這種方法會將整個交集數學委託給Framework,但它確實需要最近的API(即API級別19),所以它不適用於較舊的設備。

以上所有內容均未經過測試,無需閱讀參考資料並瞭解類似框架的行爲。

+0

太棒了!完美工作(幾乎在這個代碼中需要一個奇怪的-87)public float getAngle(PointF oOrigin,PointF oTarget) \t { \t float fAngle =(float)Math.toDegrees(Math.atan2(oTarget.x - oOrigin.x,oTarget.y - oOrigin.y)); \t如果(fAngle <0){ \t \t fAngle + = 360; \t} \t \t return fAngle-87; // -87爲Android座標系調整(?) \t}' – user3398063

+0

@ user3398063:我想這更像是一個'90'而不是'87',我猜這是因爲你計算了'atan2( x,y)'而不是'atan2(y,x)',如我的答案中所示。 – MvG