gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:18:09 27 4
gpt4 key购买 nike

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

编辑:很抱歉,在处理角度后我的头太重时提供了之前的插图。我会尝试再次解释:

this link可以看到我把中间的圆弧切成两半,圆弧的右边是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;

将角度归一化为非负数后效果很好,但当然从 360 度以下开始。然后 f1 + f2 给我左半部分的总和,f3 + f4 给我右半部分的总和。它也没有考虑圆弧定义为超过 360 的情况,这可能是“错误”的情况。

但是,这似乎更像是一种“解决方法”,而不是正确的数学解决方案。我正在寻找一个更优雅的解决方案,它应该基于两个圆弧之间的“交集”(因为数学没有“边”,它不是视觉的;

谢谢!!

最佳答案

我认为这可行,但我尚未对其进行彻底测试。您有 2 条弧线,每条弧线都有一个起始角和一个终止角。我将按照从北顺时针测量的度数来计算,就像您所做的那样,但是使用从东逆时针测量的弧度与数学家所做的一样容易。

首先“规范化”您的圆弧,也就是说,减少它们中的所有角度以位于 [0,360) 中,因此取出 360 度的倍数并使所有角度都为 +ve。确保每个圆弧的终止角位于起始角的顺时针方向。

接下来,选择其中一个弧的起始角度,哪个都不重要。将您拥有的所有角度(其中 4 个)按数字顺序排序。如果任何角度在数值上小于您选择的起始角度,则将它们加上 360 度。

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

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

2) 如果它是另一个圆弧的起始角,则重叠从该角开始。记下这个角度。扫掠遇到的下一个角度必须是停止角,并且重叠到此结束。停止。

3) 如果它是另一个圆弧的终止角,那么重叠包括第一个圆弧的起始角和这个角之间的角度。停止。

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

看,根本没有三角函数!

编辑

这是一种更“数学”的方法,因为您似乎觉得有必要。

对于 (-pi,pi] 中的角度 theta,双曲正弦函数(通常称为 sinh)将角度映射到区间中实线上的区间(大约)(-11.5,11.5]。与 arcsinarccos 不同,此函数的反函数在同一区间上也是单值的。请按照以下步骤操作:

1) 如果弧包含 0,则将其分成 2 个弧,(start,0)(0,stop)。您现在在实线上有 2、3 或 4 个间隔。

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

关于math - 两条弧的交点? (弧 = 一对角之间的距离),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com