gpt4 book ai didi

rendering - 如何镶嵌贝塞尔三角形?

转载 作者:行者123 更新时间:2023-12-03 17:21:20 25 4
gpt4 key购买 nike

我关心的是二次贝塞尔三角形,我正试图将其镶嵌以呈现它们。

我设法通过递归分割三角形来实现这一点,就像维基百科页面中描述的那样。虽然我想更精确地分割。问题是我要么得到的分割太少要么太多,因为在该算法的每次迭代中,曲面的数量都会加倍。

特别是我需要一个自适应分割算法,它允许我定义边缘的段数。我不确定我是否能做到这一点,所以我也想了解统一镶嵌技术。

最难的问题我在计算贝塞尔曲面中的一个点的法线时遇到了麻烦,我不确定是否需要,但一直在努力解决。

最佳答案

自适应曲面分割。这有很多算法。但这里有一个:

def line_angle((x0,y0),(x1,y1)):
return atan2(y1-y0,x1-x0)

def adaptive_bezier(p0,p1,p2,lev=32):
p01 = midpoint(p0,p1)
p12 = midpoint(p1,p2)
m = midpoint(p01, p12)
da = abs(line_angle(p0,p1) - line_angle(p1,p2))
if da <= max_tolerance or lev <= 0:
yield m
else:
for p in adaptive_bezier(p0,p01,m,lev-1): yield p
for p in adaptive_bezier(m,p12,p2,lev-1): yield p

对于以这种方式分割三角形,事情会很复杂。您需要根据边缘贝塞尔曲线的角度来驱动自适应曲面分割算法。在分割时,您的三角形可以通过三种独特的方式进行分割。
 2 edges      one edge     3 edges    
-------- --------- --------
\ ...// \ | / \ / \ /
\/___/ \ | / \____/
\ / \ | / \ /
\/ \|/ \/

为这些模式定义曲面分割结果,您就大功告成了。维基百科文章中仅描述了具有一条边的曲面分割。

通过研究一条边 split 的情况,可以得到另外两个分割结果。

“2 条边”可以通过先分割一条边然后再分割另一条来直接获得。

“3 条边”需要更多的工作来找出。但是您可以看到“2 边”-case 为您带来了中边。在二次贝塞尔三角形的情况下,它是出现在那里的菱形的平均总和:
--------      /\
\ / / \
\____/ -____-
\ / \ /
\/ \/

关于rendering - 如何镶嵌贝塞尔三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565635/

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