如何将此功能从创建圆形渐变更改为椭圆渐变?

时间:2016-06-22 19:59:01

标签: python math geometry trigonometry

我正在尝试创建一个不依赖于完美圆形的透明度渐变的函数,而是一个椭圆形,可以是一个完美的圆形,也可以是一个椭圆形。目前我的函数创建了一个正方形,其中包含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

2 个答案:

答案 0 :(得分:0)

由于变量命名,我不理解你的功能。但是:

Ellipse

a^2b^2部分是导致在一个方向或另一个方向挤压的原因。

为了能够得到一个不是直线上下的椭圆,你必须使用极坐标。

答案 1 :(得分: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)

完全没用 - 它提供了ux=dx, uy=dy