Math 两条弧的交点?(弧=一对角度之间的距离)

Math 两条弧的交点?(弧=一对角度之间的距离),math,geometry,trigonometry,angle,Math,Geometry,Trigonometry,Angle,我想找到一种方法来计算两条弧的交点。 我需要用这个来确定一个圆的右半部分有多少弧,左边有多少弧。 我想创建右半部分的弧,并将其与实际弧相交。 但解决这个问题花了我很多时间,所以我想在这里问问——肯定有人以前做过 编辑: 很抱歉,前面的插图是在我的头在挤压角度后太重时提供的。我会再次解释: 你可以看到,我把圆弧在中间切成两半,圆弧的右边部分包含135度,左边部分有90度。 此圆弧从-180开始,到45结束。(或从180开始,如果标准化,则在405结束) 我已经设法创建了这段代码,以便计算右部分和左

我想找到一种方法来计算两条弧的交点。 我需要用这个来确定一个圆的右半部分有多少弧,左边有多少弧。 我想创建右半部分的弧,并将其与实际弧相交。 但解决这个问题花了我很多时间,所以我想在这里问问——肯定有人以前做过

编辑: 很抱歉,前面的插图是在我的头在挤压角度后太重时提供的。我会再次解释:

<>你可以看到,我把圆弧在中间切成两半,圆弧的右边部分包含135度,左边部分有90度。

此圆弧从-180开始,到45结束。(或从180开始,如果标准化,则在405结束)

我已经设法创建了这段代码,以便计算右部分和左部分中包含的弧度量:

f1 = (angle2>270.0f?270.0f:angle2) - (angle1<90.0f?90.0f:angle1);
if (f1 < 0.0f) f1 = 0.0f;
f2 = (angle2>640.0f?640.0f:angle2) - (angle1<450.0f?450.0f:angle1);
if (f2 < 0.0f) f2 = 0.0f;
f3 = (angle2>90.0f?90.0f:angle2) - angle1;
if (f3<0.0f) f3=0.0f;
f4 = (angle2>450.0f?450.0f:angle2) - (angle1<270.0f?270.0f:angle1); 
if (f4<0.0f) f4=0.0f;
f1=(角度2>270.0f?270.0f:角度2)-(角度1640.0f?640.0f:角度2)-(角度190.0f?90.0f:角度2)–角度1;

如果(f3450.0f?450.0f:angle2)-(angle1我认为这是可行的,但我还没有彻底测试它。你有两条弧,每条弧都有一个起始角和一个终止角。我将以度为单位从北顺时针测量,就像你所做的那样,但以弧度从东方逆时针测量,就像数学家们做的一样容易

首先“正常化”您的圆弧,即减少其中的所有角度,使其位于
[0360)
,因此取360度的倍数,并使所有角度+ve。确保每个圆弧的停止角位于起始角的顺时针方向

接下来,选择一个圆弧的起始角度,不管是哪一个。将所有角度(其中4个)按数字顺序排序。如果任何角度在数字上小于所选的起始角度,则将其添加360度

按递增的数字顺序重新排序角度。您选择的起始角度将是新列表中的第一个元素。从您已经选择的起始角度开始,列表中的下一个角度是什么

1) 如果是同一弧的停止角,则没有重叠,或者该弧完全包含在另一弧内。记下并找到下一个角度。如果下一个角度是另一弧的起始角,则没有重叠,可以停止;如果是另一弧的停止角,则重叠包含整个弧第一个弧线,停下

2) 如果是另一条弧的起始角度,则重叠从该角度开始。记下该角度。扫描遇到的下一个角度必须是停止角度,重叠在该角度结束。停止

3) 如果是另一个弧的停止角,则重叠包括第一个弧的开始角和该角度之间的角度。停止

这并不是特别优雅,它更多地依赖于ifs,而不是我通常喜欢的,但它应该可以工作,并且相对容易地翻译成您最喜欢的编程语言

你看,根本没有三角学

编辑

这里有一个更“数学”的方法,因为你似乎觉得有必要

对于
(-pi,pi]
中的角度θ,双曲正弦函数(通常称为
sinh
)将角度映射到间隔(大约)
(-11.5,11.5]
。与
arcsin
arccos
不同,此函数的逆函数在相同的时间间隔内也是单值函数。请执行以下步骤:

1) 如果一条弧包含0,将其分成两条弧,
(开始,0)
(0,停止)
。现在实线上有2、3或4个间隔


2) 计算这些间隔的交点,并将其从线性测量转换回角度测量。您现在有了两个圆弧的交点。

此测试可以通过单线测试恢复。即使已经发布了一个好的答案,也让我展示我的答案

假设第一个弧是
A:(a0,a1)
,第二个弧是
B:(b0,b1)
。我假设角度值是唯一的,即在
[0°,360°[
[0,2*pi[
]-pi,pi]
(范围本身并不重要,我们将看到原因)。我将取范围
]-pi,pi]
作为所有角度的范围


为了详细解释该方法,我首先在R中设计了一个区间交叉测试。因此,我们这里有
a1>=a0
b1>=b0
。根据实际区间的相同符号,我计算以下数量:

S = (b0-a1)*(b1-a0)
S = (b0-a1)*(b1-a0)*H(a1-a0)*H(b1-b0)
如果
S>0
,则两段不重叠,否则它们的交点不为空。很容易看出此公式的作用。如果
S>0
,则有两种情况:


  • b0>a1
    意味着
    b1>a0
    ,因此没有交叉点:
    a0=一张能说明你的意思的图片会很有帮助。在你的图片中,左边部分肯定包含90度角?是的,我弄糊涂了。我会修正它:-)你的坐标系是什么?你如何描述一个弧?“从-180度开始,以135度结束,顺时针方向”并不能描述那个图像,无论你们如何旋转它。我已经编辑过,以清除这个。谢谢对于一个十字路口来说,这似乎是太多的工作了,不是吗?也许我错了,但必须有一个数学(和更短的)方法。我认为你从来没有写过这么多的代码来相交于矩形。。。那么,为什么弧应该有所不同呢?谢谢你的努力,我真的很感激!伙计!简单。。。好主意!谢谢
    
    T := (b0>a1)^(b1>a0)^(a1>=a0)^(b1>=b0)
    
    T := (a1+b1-a0-b0+2*pi*((b1<b0)+(a1<a0))<2*pi) | ((b0>a1)^(b1>a0)^(a1>=a0)^(b1>=b0))