def generate(self): p = PNMImage(self.size, self.size, num_channels=2) for y in range(self.size): ry = (y - self.half_size + 0.5) / self.size for x in range(self.size): rx = (x - self.half_size + 0.5) / self.size dist = sqrt(rx * rx + ry * ry) value = min(1.0, pow(self.factor, dist)) v = value * self.max_value p.set_xel_a(x, y, v, v, v, v) return p
def generate(self): p = PNMImage(self.size, self.size, num_channels=2) sigma = self.fwhm / (2 * sqrt(2 * log(2))) inv_sig2 = 1.0 / (2 * sigma * sigma) inv_factor = 1.0 / (sigma * sqrt(2.0 * pi)) for y in range(self.size): ry = y - self.half_size + 0.5 for x in range(self.size): rx = x - self.half_size + 0.5 dist2 = rx*rx + ry*ry value = min(1.0, exp(- dist2 * inv_sig2) * inv_factor * self.fwhm) v = value * self.max_value p.set_xel_a(x, y, v, v, v, v) return p
def generate(self): p = PNMImage(self.size, self.size, num_channels=2, maxval=65535) for y in range(self.size): ry = (y - self.half_size + 0.5) / (self.half_size - 1) for x in range(self.size): rx = (x - self.half_size + 0.5) / (self.half_size - 1) r = sqrt(rx * rx + ry * ry) if r > 1.0: r = 0.0 elif r > 0.5: r = 2 * (1 - r) else: r = 1.0 r *= self.max_value p.set_xel_a(x, y, r, r, r, r) return p
def generate(self): pt = self.top.generate() pb = self.bottom.generate() p = PNMImage(self.size, self.size, num_channels=2) for y in range(self.size): yt = y - self.size / 2 + self.top.size / 2 yb = y - self.size / 2 + self.bottom.size / 2 for x in range(self.size): xt = x - self.size / 2 + self.top.size / 2 xb = x - self.size / 2 + self.bottom.size / 2 if xt < 0 or xt >= self.top.size or yt < 0 or yt >= self.top.size: c = pb.get_xel_a(xb, yb) elif xb < 0 or xb >= self.bottom.size or yb < 0 or yb >= self.bottom.size: c = pt.get_xel_a(xt, yt) else: ct = pt.get_xel_a(xt, yt) cb = pb.get_xel_a(xb, yb) c = ct + cb * (1 - ct[3]) c[3] = ct[3] + cb[3] * (1 - ct[3]) p.set_xel_a(x, y, c) return p