2016-06-22 3 views
1

私は、透明なグラデーションのために完全な円に依存しない関数を作成しようとしていますが、完全な円でも楕円形でもよい楕円形の関数を作成しようとしています。現在、私の関数は、円形の勾配の1/4を含む四角形を作成します。この勾配は、後で3つの方向にミラーリングされて円を描きます。私はので、変数の命名のあなたの機能を理解していないこの関数を変更して、円形勾配から楕円勾配にする方法はありますか?

def _calc_mask(rx, ry): #rx and ry represent the pixels 
    dx = rx - (width/2) # horizontal center of Grating 
    dy = ry - (width/2) # vertical center of Grating 

    t = math.atan2(dy, dx) 
    r = math.sqrt(dx ** 2 + dy ** 2) 
    ux = r * math.cos(t) 
    uy = r * math.sin(t) 
    f = math.exp(-0.5 * (ux/(self.std_dev*3)) ** 2 - 0.5 * 
       (uy/(self.std_dev*3)) ** 2) 
    f = 1.0-f 
    return 0, 0, 0, f 

答えて

0

My機能は次のように定義されます。しかし:

Ellipse

a^2b^2部品は、一方向に押しつぶし、または他の原因となるものです。

楕円形が真っ直ぐ上下にない場合、極座標を使用する必要があります。

+1

ux=dx, uy=dyを与える「ストレート・アップとダウンあなたは極座標を使用する必要がありますない楕円を持ってできるようにするには。」これは手がかりではありません。[こちら](http://www.maa.org/external_archive/joma/Volume8/Kalman/General.html) –

+0

あなたの獣はまあ、evan058!私はほとんどの人にとってより簡単に言ったはずです。さまざまな代数構文システムが置換をサポートしているので、微分方程式、三角関数、線形代数、算術または枝で楕円を作ることは量子物理学でも可能です....いいえ...コライダー内の粒子。あなたは正しいSirです:) –

0

軸に沿った楕円勾配を得るには、dxとdyのスケール係数を使用します。例:dx = 2.0 * dx

P.S.あなたのコード

t = math.atan2(dy, dx) 
r = math.sqrt(dx ** 2 + dy ** 2) 
ux = r * math.cos(t) 
uy = r * math.sin(t) 

は完全に役に立たない - それは

関連する問題