计算平移弧的距离以避免交叉

时间:2015-10-29 03:08:34

标签: java android math angle

我有一个Canvas,我画了一个圆圈/ 360度弧。我有弧开始绘制-90(顶部)而不是右边(0),默认情况下。

我想在同一个画布的顶部放置一个矩形,以减少弧的扫描,使两者不相交。我附上了一张图片来说明

enter image description here 所以我需要做的是找出矩形的一半表示的角度,以便我可以调整从哪里开始绘制弧线。圆圈的中心位于我的画布的中心:

[canvas.width /2, canvas.height /2]

我已经阅读了this question这样的资源,但他们做的远不止让我觉得自己什么都不知道。我尝试了一些以此

结尾的失败公式
double adjustment = Math.atan2(rectangleY - circleY, rectangleX - circleX) - Math.atan2(rectangleY - circleY, (rectangleX + rectangleWidth) - circleX);

有人可以告诉我在Java中计算这个的正确方法是什么?我也想知道如果可能的话(如图中阴影橙色部分的宽度),如何找到矩形相交的位置,虽然这对我来说现在不太重要了

1 个答案:

答案 0 :(得分:1)

设W为矩形的宽度,R为圆的半径,A为您要查找的角度。

有一个直角三角形,中心角为A,斜边为R,角度为A,边为W / 2,所以

W / 2R =罪(A)

所以

A = Math.asin(0.5*W/R);

当W>时,你不能使用asin(0.5W / R)。 2R

修改

回答第二个问题(找到交叉点)

设H是从圆心到矩形的距离。当矩形足够宽以使圆与下侧相交时,会出现一个直角三角形,其中A位于中心,R位于斜边,H位于与A相邻的边

H/R = cos(A)A = Math.acos(H/R)。计算两个角度并使用较小的角度。