- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我使用 Java 编写的 vector 图形程序中,理想情况下任何形状都可以由 Path2D 类的修改形式表示,该类使用二次贝塞尔曲线。理想情况下,椭圆也可以表示为 Path2D 对象。互联网上有大量关于使用三次贝塞尔曲线近似圆的象限的文档,但使用 Path2D 类,三次贝塞尔曲线是不可能的。我一直在使用 Desmos 尝试找到圆的八分圆的近似值,以及以 1
为中心半径的圆的中点(两个控制点之间) (0, 0)
处的值大约为 (0.993, 0.412)
。当然有一些无理数可以更精确地表达为使用平方根或三角函数的公式。
我尝试使用公式4*tan(pi/(2*n))/3
。要么这个公式不适用于八分圆,要么我在哪里找到它并没有得到很好的解释。
最佳答案
如果你说出你在哪里找到它,那将会有所帮助 - 任意角度的公式(显然包括八分圆,只需插入 PI/4 作为你的角度)与你所显示的有很大不同。在https://pomax.github.io/bezierinfo/#circles上找到真正的公式和解释。 .
二次曲线非常简单,因为控制点是端点切线的线性交点。因此,给定具有垂直切线的起点 (1,0)(因为它是一个圆,这就是圆的工作原理)和某个角度 phi 的终点 (cos(phi), sin(phi)),具有切线 (sin(phi) ,-cos(phi)),我们可以确定该曲线的控制点为:
Cx = cos(phi) - b * sin(phi)
Cy = sin(phi) + b * cos(phi)
地点:
cos(phi) - 1
b = ------------
sin(phi)
(上面的链接中解释了这里的实际数学)。
代入 PI/4 来计算第一个八分圆意味着我们得到:
Cx = 1 (obviously; it's a vertical tangent, so the x coordinate is fixed)
Cy = sqrt(2) - 1
你就完成了:你不需要推导任何其他值,因为所有其他八分圆只是这些值的反射(reflect),你只需在纸上画一个圆,画线来显示八分圆,用它的坐标值标记第一个八分圆,然后“哦,显然其他坐标是:...”——上面的公式也适用于半径为 1 的圆,但你知道怎么做相乘,这样您就知道如何缩放这些值,使其与您想要的圆相匹配。
我很好奇为什么你想要二次曲线,因为它们客观上与三次曲线相比非常糟糕。例如:二次八分圆的建模需要 16 个点,而四分之一立方体的建模只需要 12 个点,精度更高。
此外,即使您一心只使用二次方程,您的软件的用户也可能会转向其他软件。他们希望立方体能够使用到这样的程度:如果你的软件的其余部分值得使用,他们会向你请求使用立方体。为此进行规划,或者理想情况下从一开始就支持二次和三次。毕竟,SVG 等已经这样做了。
关于java - 如何使用二次贝塞尔曲线近似圆的八分圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729291/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!