4

私が作った小さな物理エンジンで素晴らしいたわみ効果を作ろうとしています。現在、ポリゴンエッジの法線からうまく偏向しています。しかし、「丸みを帯びたたわみ」の滑らかな効果を得るために100のエッジを持つポリゴンを作成する代わりに、代わりに楕円を使用してたわみ法線を計算できると考えました。

ですから、私が本当に欲しいのは、線分の点Pを取り、仮想楕円(w、h)の円周上の法線Nを返す関数です。詳細については、添付の写真を参照してください。

問題の写真

楕円の円周上のポイントを取得するには、次のようになります。

x=P.x+Math.sin()*w
y=P.y+Math.cos()*h

しかし、どうすればそれから正常を得ることができますか?


これは、BDOアダムズ博士による答えを実装する試みのフィドルです。

4

2 に答える 2

5

楕円点の方程式は

x=x_centre+a*cos(t)
y=y_centre+b*sin(t)

楕円の各点について、次のように見つけることができtますatan2( (y-y_centre)/b , (x-x_centre)/a )

t接線方向を決定できることがわかっている場合: dx/dt,dy/dt:

dx=-a*sin(t)
dy=b*cos(t)

接線の方向がわかっている場合は、それを 90 度回転させるだけで法線が得られます。

nx=b*cos(t)
ny=a*sin(t)

計算を避けるためtに、最初の 2 つの式と組み合わせることができます。

nx=(x-x_centre)*b/a
ny=(y-y_centre)*a/b
于 2012-11-23T16:31:38.577 に答える
0

最初にatan2関数を使用して法線の角度を取得し、そこからベクトルを取得します

theta = atan2(2y/semiminorradius, x/semimajorradius)
ny = semiminorradius * sin(theta)
nx = semimajorradius * cos(theta)

法線ベクトルを正規化する必要がありますか? (単位長さ) もしそうなら

r = sqrt(tx^2+ty^2)
nny = ny/r
nnx = nx/r

あなたがそれを描いたように、ポイントは実際には(ny、nx)です

于 2012-11-23T11:47:12.490 に答える