我試圖獲得弧的座標(用藍色表示)(以便我可以直觀地繪製它們[在Android path.drawArc()]任何2(並最終$ n $)圈爲'中央'部分(用紅色表示)。Java圓相交 - 中心部分
我發現this,但遺憾的是我不能在所有的數學頭腦!
我編碼的東西找到交點...如果有幫助?
我試圖獲得弧的座標(用藍色表示)(以便我可以直觀地繪製它們[在Android path.drawArc()]任何2(並最終$ n $)圈爲'中央'部分(用紅色表示)。Java圓相交 - 中心部分
我發現this,但遺憾的是我不能在所有的數學頭腦!
我編碼的東西找到交點...如果有幫助?
我看到沒有path.drawArc()
,只有Canvas.drawArc
,Path.addArc
和Path.arcTo
。所有這些需要一個RectF oval
參數,我會猜測描述了圓的大小和位置。因此,如果要繪製透鏡形區域的右邊界,則這屬於左圓的邊界,因此您將oval
設置爲左圓的邊界框。那麼你需要兩個角度,startAngle
和sweepAngle
。您可以從Math.atan2(y, x)
中獲取它們,其中(x, y)
是從圓心指向其中一個交點的向量。因此瞭解這些交點將非常有用。您將使用一個來計算起始角度,而另一個則使用第一個弧線的結束角度。掃描角度只是結束和開始之間的差異。對於第二個弧,請將開始和結束的角色顛倒過來,然後您將獲得基本封閉的路徑,不過您可能必須發出明確的close
調用才能使該閉包顯式化。
另一種方法是使用Path.op(circle1, circle2, Path.Op.INTERSECT)
。 circle1
和circle2
可由Path.addCircle
組成。這種方法會將整個交集數學委託給Framework,但它確實需要最近的API(即API級別19),所以它不適用於較舊的設備。
以上所有內容均未經過測試,無需閱讀參考資料並瞭解類似框架的行爲。
太棒了!完美工作(幾乎在這個代碼中需要一個奇怪的-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
@ user3398063:我想這更像是一個'90'而不是'87',我猜這是因爲你計算了'atan2( x,y)'而不是'atan2(y,x)',如我的答案中所示。 – MvG