2

だから、私は楕円を与えました-それらはそれらの中点、水平半径(rh)と垂直半径(rv)によって定義されます。私はsin/cosを使用してそれらを描画していますが、結果は私にはかなり良く見えます(これがエラーソースでないことを確認するだけです)。

ここで、角度(または方向ベクトル)を指定し、その角度/方向で楕円の輪郭上の点を取得するとします。私の直感的なアプローチは、方向ベクトルを使用して正規化し、そのx成分にrhを掛け、y成分にrvを掛けることでした。今、私の書いたプログラムと私が紙で行ったすべての計算の両方が、私が望むポイントではなく、別のポイントを私に与えますが、それはまだ楕円の輪郭にあります。ただし、この方法は、方向が(1,0)、(0、1)、(-1、0)、(0、-1)のいずれかである場合は問題なく機能します(したがって、0°、90°、 180°、270°)。

インターネット上には楕円自体に関するデータが非常に大量にありますが、特定の問題に関する情報を見つけることができませんでした。また、上記の問題よりも優れた解決策を思い付くことができませんでした。

だから、これを達成する方法はありますか?

4

2 に答える 2

2

あなたが求めていることを理解していれば、必要なのは楕円の中心から角度が測定される楕円の極形式であると思います。この形式の楕円を使用すると、指定されたシータの選択に対する楕円半径の値を評価し、ポイントをプロットできます。

この gif 画像を見ると、パラメトリック角度を使用すると、シータ = 90、180、270、および 360 度でのみ正しい結果が得られる理由がわかりますhttp://en.wikipedia.org/wiki/File:Parametric_ellipse. gif . 楕円に極形式を使用すると、必要な点が得られるはずです。

于 2012-07-03T20:38:11.640 に答える
1

その通りです。パラメトリック角度は、目的の点と X 軸の間の角度と同じではありません。ただし、それらの接線は (係数 でrh/rv) 比例するため、次のアプローチを使用できます。

  • 目的の角度のタンジェントを取得します
  • この接線を掛けますrh/rv
  • 三角恒等式を使用して、正接から正弦と余弦を計算します
  • パラメータ(中間点、rh、rv)に従ってポイントをスケーリング/配置します

Python の場合:

from math import copysign, cos, sin, sqrt

class Ellipse:

        def __init__(self, mx, my, rh, rv):
                self.mx = mx
                self.my = my
                self.rh = rh
                self.rv = rv

        def pointFromAngle(self, a):
                c = cos(a)
                s = sin(a)
                ta = s / c  ## tan(a)
                tt = ta * self.rh / self.rv  ## tan(t)
                d = 1. / sqrt(1. + tt * tt)
                x = self.mx + copysign(self.rh * d, c)
                y = self.my + copysign(self.rv * tt * d, s)
                return x, y
于 2012-07-03T15:23:55.353 に答える