3

假设您知道球面三角形的三个顶点。那么如何在 3D 中绘制球体的边呢?

我需要一些 python 代码在 Blender 3d 建模软件中使用。

我已经在 Blender 中完成了 3D 球体。

谢谢&愉快的搅拌。

注1:

我在球体上有 3 个点/顶点 (p1,p2,p3) 用于球形三角形,但我需要在 3D 中跟踪球体上的边缘

那么确定球体上三角形的每个点对之间的所有顶点所需的方程是什么?从 p1 到 p2 - p2 到 p3 和 o3 到 p1 的 3 条边

我知道它与球体上测地线的大圆有关,但找不到合适的方程来在球坐标中进行计算!

谢谢


大圈子

看到一个大圆的解决方案并直接在球坐标中看到 tehsolution 会很有趣!

但在欧几里得空间中做这件事仍然很有趣

谢谢


好的,我使用了 2 点之间的线段的这个想法

但没有按照前面的说明做

我使用了另一种方法 - 贝塞尔线插值**

我用贝塞尔线对线进行参数化,然后细分并计算为显示弦上每个细分贝塞尔点的比率和角度,它工作得非常好且非常精确

但是看看它是如何使用早期方法完成的,但不确定如何进行迭代循环会很有趣?

您如何使用 Ctrl-V 在此处加载 python 代码?

感谢和快乐 2.5


我确实使用搅拌机的论坛,但没有保证一直得到明确的答案!

这就是我在这里尝试的原因 - 抓住了机会

我做了第一个边缘似乎工作现在必须做一个循环以获得第一边缘的多段然后也做其他边缘

2-其他主题我在这里打开关于贝塞尔三角形补丁的帖子我知道这不是一个有用的工具,但只是为了展示它是如何完成的,你是否看过一个 python sript 来做这些三角补丁,我确实在搅拌机的 foum 上问过这个问题,但没有答案也在 IRC python 上,现在似乎已经死了

嘿 非常感谢这个数学讨论如果我有问题明天再来

快乐数学和2.5

4

2 回答 2

4

创建正弦网格

在 Blender 中创建正弦波网格的 Python 代码:

import math
import Blender
from Blender import NMesh

x = -1 * math.pi

mesh = NMesh.GetRaw()
vNew = NMesh.Vert( x, math.sin( x ), 0 )
mesh.verts.append( vNew )

while x < math.pi:
 x += 0.1
 vOld = vNew
 vNew = NMesh.Vert( x, math.sin( x ), 0 )
 mesh.verts.append( vNew )
 mesh.addEdge( vOld, vNew )

NMesh.PutRaw( mesh, "SineWave", 1 )
Blender.Redraw()

代码的解释在:http ://davidjarvis.ca/blender/tutorial-04.shtml

绘制边缘的算法

画一条线段和画三条是一样的,所以问题可以重述为:

给定两个端点,如何在球体上画弧?

换句话说,在球体上的以下两点之间画一条弧线:

  • P 1 = (x 1 , y 1 , z 1 )
  • P 2 = (x 2 , y 2 , z 2 )

通过沿弧 P 1 P 2绘制许多中点来解决此问题,如下所示:

  1. 计算球体的半径:
    R = sqrt( x12 + y12 + z12 )
    
  2. 计算 P 1和 P 2之间连线的中点 ( m ) :
    Pm = (xm, ym, zm)
    xm = (x1 + x2) / 2
    ym = (y1 + y2) / 2
    zm = (z1 + z2) / 2
  3. 计算到 P 1和 P 2之间直线中点的长度:
    Lm = sqrt( xm2, ym2, zm2 )
  4. 计算球体半径与中点长度的比值:
    k = R / Lm
  5. 计算沿弧的中点:
    Am = k * Pm = (k * xm, k * ym, k * zm)

对于 P 1到 P 2,创建两条边:

  • P 1
  • 到P 2

两条边将穿过球体。要解决这个问题,请计算 P 1 A m和 A m P 2之间的中点。中点越多,线段越接近球体表面。

由于 Blender 的计算相当精确,因此生成的弧很可能(渐近地)被球体隐藏。创建三角形网格后,将其从球体移开几个单位(例如 0.01 左右)。

使用样条曲线

另一种解决方案是从以下创建样条线:

  • 球体的半径(如上计算)
  • 1 _
  • _
  • 2

生成的样条线必须移动到球体前面。

搅拌机艺术家论坛

Blender 专家也会对如何解决这个问题有很好的想法;试着问他们。

也可以看看

http://www.mathnews.uwaterloo.ca/Issues/mn11106/DotProduct.php

http://cr4.globalspec.com/thread/27311/Urgent-Midpoint-of-Arc-formula

于 2010-07-03T19:44:48.200 回答
0

一种廉价且简单的方法是创建三角形并将面细分到您想要的细节级别,然后将所有顶点标准化为您想要的半径。

于 2010-07-03T19:41:38.427 回答