gpt4 book ai didi

ios - 圆角 : How to calculate Fillet radius?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:07 25 4
gpt4 key购买 nike

对于另一个角上任意数量的圆角,我如何找到可以应用于任一角的最大圆角?

评论中问题的答案:

1) 内外大圆弧(此处为90度宽的圆弧)始终具有相同的中心

2) 当要求最大四舍五入时,对另一个较小的圆有什么限制?它是否需要至少有一定的半径?否则,您所做的只是一轮舍入。

给出了两个圆的半径之一。除了我找不到的另一个圆的最大值之外,没有其他限制。如果我提到的“固定”角的舍入为零,那么我正在搜索只能应用于另一个角的最大舍入。

3) 什么构成最大舍入?您是否要在以上两个示例之间进行选择?还是找到其中任何一种情况都被视为解决方案?

所示案例中的任何一个都是完美的解决方案。例如。在第一张图片中,可能会给出较小圆的半径。然后我正在寻找较大半径的最大半径。这些图像只是完美​​解决方案的示例。

4)两条弧线有没有约束条件?如果圆弧不适合一个完整的圆会怎样?答案会是最大的吗?

圆弧不能适合一个完整的圆,您的意思是什么?

所有的圆都是完美的圆,但我无法弄清楚可能的最大舍入大小,或者如何计算它的位置。这是一些描述问题的图像。

最佳答案

假设坐标系原点在内外大圆弧的中心点...

对于第一种大圆与外缘相切的情况,大圆的圆心为

x = R cos(t) / (1 + cos(t))
y = R sin(t) / (1 + cos(t))

其中 R 是外弧段的半径,t 是 x 轴与从原点通过大圆心的射线之间的夹角。

对于第二种大圆与内边相切的情况,大圆的圆心为

x = R cos(t) / (1 - cos(t))
y = R sin(t) / (1 - cos(t))

其中R是内弧段的半径,t是角度...

在这两种情况下,圆的半径都等于它的 x 坐标。 t 的范围在某个最小角度和 PI/2 之间。在 PI/2 处,圆小得几乎没有。在最小角度,y 值等于相反的半径。换句话说,对于大圆与外缘相切的第一种情况,最小角度是 y 等于内半径。而如果圆与内边缘相切,则最小角度是 y 等于外半径。可以从数学上证明两种情况下的最小角度相同(对于给定的内半径和外半径,内切线和外切线都具有相同的最小角度)。然而,计算最小角度有点困难。我知道如何做到这一点的唯一方法是玩高/低游戏,例如

- (CGFloat)computeAngleForOuterTangentGivenY:(CGFloat)Y
{
CGFloat y;
double high = M_PI_2;
double low = 0;
double mid = M_PI_4;

while ( high - low > 1e-9 )
{
y = (self.outerRadius * sin( mid )) / (1.0 + cos( mid ));
if ( y > Y )
high = mid;
else
low = mid;
mid = (low + high) / 2.0;
}

return( mid );
}

- (CGFloat)computeAngleForInnerTangentGivenY:(CGFloat)Y
{
CGFloat y;
double high = M_PI_2;
double low = 0;
double mid = M_PI_4;

while ( high - low > 1e-9 )
{
y = (self.innerRadius * sin( mid )) / (1.0 - cos( mid ));
if ( y > Y )
low = mid;
else
high = mid;
mid = (low + high) / 2.0;
}

return( mid );
}

循环需要大约 30 遍才能收敛到一个答案。

求小圆的坐标,注意小圆和大圆的y值相同,并且与圆弧段的对边相切。因此,使用适当的高/低算法根据其 y 值计算小圆的角度 t,然后使用上述公式计算 x 值。

QED

关于ios - 圆角 : How to calculate Fillet radius?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053584/

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