3

球面三角形の 3 つの頂点がわかっているとします。では、3D で球体の側面をどのように描くのでしょうか?

Blender 3D モデル化ソフトウェアで使用する Python コードが必要です。

私はすでに Blender で 3D で球体を作成しています。

ありがとう、幸せなブレンダー。

注 1:

球面三角形の球に 3 つの点/頂点 (p1、p2、p3) がありますが、球のエッジを 3D でトレースする必要があります。

では、球上の三角形の各点ペア間のすべての頂点を決定するために必要な方程式は何でしょうか p1 から p2 への 3 つのエッジ - p2 から p3 および o3 から p1

球上の測地線の大円と関係があることは知っていますが、球座標で計算を行うための適切な方程式が見つかりません!

ありがとう


大円

大円で解を見て、球座標で直接解を見てみるのも面白かったでしょう!

しかし、ユークリッド空間でそれを行うことはまだ興味深い

ありがとう


わかりました、2点間の線分のこのアイデアを使用しました

しかし、前に示したようにそれをしませんでした

別の方法を使用しました-ベジェライン補間**

線をベジエ線でパラメータ化し、分割して、コード上の分割されたベジエ ポイントごとの比率と角度を示すように計算しました。非常にうまく機能し、非常に正確です。

しかし、以前の方法でそれがどのように行われるかを見るのは興味深いでしょうが、反復ループを行う方法は定かではありませんか?

Ctrl-V を使用して、ここの Python コードをロードするにはどうすればよいですか?

感謝と幸せ 2.5


私はブレンダーのフォーラムを使用していますが、常に明確な回答を得るための保証はありません!

それが私がここで試した理由です - チャンスをつかみました

私は最初のエッジが機能しているように見えましたが、ループを作成して最初のエッジのマルチセグメントを取得し、次に他のエッジも実行する必要があります

2-他の件名私はここでベジエ三角形パッチの投稿を開きます私はそれが便利なツールではないことを知っていますが、それがどのように行われるかを示すために、これらの三角形パッチを実行するためのpython sriptを見て、ブレンダーのfoumでこの質問をしましたが、答えはありませんまた、IRC python と sems は現在死んでいる可能性があります。おそらく、1 週間か 2 週間でリリースされる予定の 2.5 Beta vesion を完成させるのに忙しすぎるでしょう。

ねえ、この数学の議論に感謝します。問題がある場合は明日戻ってきます

幸せな数学と 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にあります。

エッジをプロットするアルゴリズム

1 つの線分を描くことは 3 つを描くことと同じであるため、問題は次のように言い換えることができます。

端点が 2 つある場合、どのように球体に弧を描くのですか?

つまり、球上の次の 2 点間に円弧を描きます。

  • 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に対して、2 つのエッジを作成します。

  • P 1~ A m
  • A mから P 2

2 つのエッジが球体を切断します。これを解決するには、 P 1 A mと A m P 2の間の中点を計算します。中間点が多いほど、線分が球の表面に近くなります。

Blender の計算はかなり正確であるため、結果として得られるアークは (漸近的に) 球によって隠される可能性があります。三角メッシュを作成したら、それを球から数単位 (0.01 程度) 離します。

スプラインを使用する

別の解決策は、次からスプラインを作成することです。

  • 球の半径 (上記のように計算)
  • P1 _
  • 午前_
  • P2 _

結果のスプラインは、球の前に移動する必要があります。

Blender アーティスト フォーラム

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

これを行う安価で簡単な方法の 1 つは、三角形を作成し、必要な詳細レベルまで面を細分化してから、すべての頂点を必要な半径に正規化することです。

于 2010-07-03T19:41:38.427 に答える