跳转到内容

File:Domain coloring x2-1 x-2-i x-2-i d x2+2+2i.xcf

页面内容不支持其他语言。
這個文件來自維基共享資源
维基百科,自由的百科全书

原始文件 (2,000 × 2,000像素,文件大小:15.09 MB,MIME类型:image/x-xcf


 
本XCF 位图使用GIMP创作.

Warning sign 警告: XCF files must be compatible with GIMP 2.8 in order to be displayed. Files created with GIMP 2.10 format currently are not supported by the MediaWiki software (see T196054). Furthermore, indexed images are not supported and must be converted to RGB or grayscale.

摘要

描述
Français : Coloration de régions de la fonction complexe sur le domaine . La couleur (teinte) représente l'argument de la fonction. Les lignes noires et blanches (saturation, valeur) représentent les valeurs de la fonction à module constant. Ce fichier comporte 4 calques : les lignes blanches indiquant les lignes iso-argument tous les pi/6, la grille transformée du plan complexe, les variations d'intensité représentant le module, la couleur représentant l'argument
English: Domain coloring of the complex function on the domain . Phase is coded by the hue and module by the value. Image generated by python script conformal.py v0.4 (Michael J Gruber and JB Cuenot) with Gimp v2.8
日期
来源 自己的作品
作者 Djiboun
其他版本
XCF开发
InfoField
 
本XCF 位图使用GIMP创作。

许可协议

我,本作品著作权人,特此采用以下许可协议发表本作品:
w:zh:知识共享
署名 相同方式共享
本文件采用知识共享署名-相同方式共享 4.0 国际许可协议授权。
您可以自由地:
  • 共享 – 复制、发行并传播本作品
  • 修改 – 改编作品
惟须遵守下列条件:
  • 署名 – 您必须对作品进行署名,提供授权条款的链接,并说明是否对原始内容进行了更改。您可以用任何合理的方式来署名,但不得以任何方式表明许可人认可您或您的使用。
  • 相同方式共享 – 如果您再混合、转换或者基于本作品进行创作,您必须以与原先许可协议相同或相兼容的许可协议分发您贡献的作品。

Python src code

#!/usr/bin/env python

#   conformal.py
#   Copyright (C) 2006-2011  Michael J. Gruber <conformal@drmicha.warpmail.net>
#
#    This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, version 2 of the License.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

confversion = "0.3+"

# allow access through module and without
import math, cmath
from math import *
from cmath import *

from array import array
from gimpfu import *

# try importing typical math modules
try:
	from fpconst import *
	import scipy.special
except ImportError:
	pass

try:
	import mpmath
except ImportError:
	pass


def conformal_batch(width, height, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient, filename):
	conformal_core(width, height, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient, filename)


def conformal(width, height, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient):
	conformal_core(width, height, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient, None)


def conformal_core(width, height, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient, filename):
	image = gimp.Image(width, height, RGB) 
	drawables = [ gimp.Layer(image, "Argument", width, height, RGBA_IMAGE, 100, NORMAL_MODE),
		      gimp.Layer(image, "Log. modulus", width, height, RGBA_IMAGE, 35, VALUE_MODE),
		      gimp.Layer(image, "Grid", width, height, RGBA_IMAGE, 10, DARKEN_ONLY_MODE)]
	image.disable_undo()
	l = 1
	for drawable in drawables:
		image.add_layer(drawable, l)
		l = -1

	bpp = drawables[0].bpp

	gimp.tile_cache_ntiles(2 * (width + 63) / 64)

	dest_rgns = [ drawable.get_pixel_rgn(0, 0, width, height, True, False) for drawable in drawables ]
	progress = 0
	max_progress = width * height
	if filename is None:
		gimp.progress_init("Conformally Mapping...")
	sx = (width-1.0)/(xr-xl)
	sy = (height-1.0)/(yt-yb)
	w = complex(0.0)
	z = complex(0.0)
	cx, cy = 0, 0
	mp2 = 2.0*math.pi # no need to do this 500*500 times...
	ml2 = 2.0*math.log(2) # no need to do this 500*500 times...
	ml = math.log(2) # no need to do this 500*500 times...
	compiled=compile(code, "compiled code", "exec", 0, 1)
	compiledconstraint=compile(constraint, "compiled constraint code", "exec", 0, 1)

	dests = [ array("B", "\x00" * width*height*bpp) for i in range(3) ]

	QUANT = 4096
	args = [ i/(QUANT-1.0) for i in range(QUANT) ]
	arggradsamples = list(gimp.gradient_get_custom_samples(gradient, args)) + [[0,]*bpp]
	modgradsamples = list(gimp.gradient_get_custom_samples("Default", args)) + [[0,]*bpp]
	sqrsamples = [ [0,]*(bpp-1) + [255,], [255,]*(bpp-1) + [255,] , [0,]*bpp ]
	for col in range(QUANT+1):
		arggradsamples[col] = [ ((int)(255*arggradsamples[col][i]+0.5)) for i in range(bpp)]
		modgradsamples[col] = [ ((int)(255*modgradsamples[col][i]+0.5)) for i in range(bpp)]
	qinf = 1.0 + 1.0/(QUANT-1) # uggely uggely

	args = [0.0,] * width
	mods = [0.0,] * width
	sqrs = [0,] * width

	for row in range(0, height):
		for col in range(0, width):
			z = col/sx + xl + 1j*( yt - row/sy)
			p = True
			try:
				exec(compiledconstraint)
			except (OverflowError, ValueError):
				p = False
			if not p:
				w = 0.0
			else:
				try:
					exec(compiled)
				except (OverflowError, ValueError):
					p = False
			if not p or isnan(w) or isinf(w):
				w = 0.0

			try:
				logw = cmath.log(w)
				arg = logw.imag
				if isnan(arg) or isinf(arg):
					arg = 0.0
					p = False
				elif arg < 0.0:
					arg = arg + mp2
				mod = ( logw.real/ml ) % 1.0
				if isnan(mod) or isinf(mod):
					mod = 0.0
					p = False
			except (OverflowError, ValueError):
				arg = 0.0
				mod = 0.0
				p = False
			arg = arg/mp2

			try:
				sqr = int(w.imag/grid % 2.0) + int(w.real/grid % 2.0)
				if isnan(sqr) or isinf(sqr):
					sqr = 0
					p = False
			except (OverflowError, ValueError):
				sqr = 0
				p = False

			sqr = sqr % 2

			if not p:
				arg = qinf
				mod = qinf
				sqr = 2

			args[col] = arg
			mods[col] = mod
			sqrs[col] = sqr

		dests[0][row*width*bpp : (row+1)*width*bpp] = array("B", [ arggradsamples [int((QUANT-1)*args[col]+0.5)][i] for col in range(0, width) for i in range(bpp) ] )

		dests[1][row*width*bpp : (row+1)*width*bpp] = array("B", [ modgradsamples[int((QUANT-1)*mods[col]+0.5)][i] for col in range(0, width) for i in range(bpp) ] )

		dests[2][row*width*bpp : (row+1)*width*bpp]= array("B", [ sqrsamples[sqrs[col]][i] for col in range(0,width) for i in range(bpp) ] )
	
		progress = progress + width 
		if filename is None:
			gimp.progress_update(float(progress) / max_progress)

	for i in range(3):
		dest_rgns[i][0:width, 0:height] = dests[i].tostring()

	for drawable in drawables:
		drawable.flush()
		drawable.update(0,0,width,height)
	if not checkboard:
		pdb.plug_in_edge(image,drawables[2], 10, 0, 0) # amount, WRAP, SOBEL
		pdb.plug_in_vinvert(image,drawables[2])
	if image.parasite_find("gimp-comment"):
		image.parasite.detach("gimp-comment")
	image.attach_new_parasite("gimp-comment", PARASITE_PERSISTENT, """# conformal %s
code = \"\"\"
%s
\"\"\"
constraint = \"\"\"
%s
\"\"\"
xl = %f
xr = %f
yt = %f
yb = %f
grid = %f
checkboard = %d
gradient = "%s"
width = %d
height = %d
""" % (confversion, code, constraint, xl, xr, yt, yb, grid, checkboard, gradient, width, height))
	if filename is None:
		image.enable_undo()
		gimp.Display(image)
		gimp.displays_flush
	else:
		if filename.find('.xcf') > 0:
			pdb.gimp_xcf_save(1, image, drawables[0], filename, filename)
		else:
			flat_layer = pdb.gimp_image_flatten(image)
			pdb.gimp_file_save(image, flat_layer, filename, filename)


register(
	"conformal_batch",
	"Colour representation of a conformal map",
	"Colour representation of a conformal map",
	"Michael J Gruber",
	"Michael J Gruber",
	"2011",
	"",
	"",
	[
		(PF_INT, "width", "width", 512),
		(PF_INT, "height", "height", 512),
		(PF_TEXT, "code", "code", "w=z"),
		(PF_TEXT, "constraint", "constraint", "p=True"),
		(PF_FLOAT, "xl", "x left", -1.0),
		(PF_FLOAT, "xr", "x right", 1.0),
		(PF_FLOAT, "yt", "y top", 1.0),
		(PF_FLOAT, "yb", "y bottom", -1.0),
		(PF_FLOAT, "grid", "grid spacing", 1.0),
		(PF_BOOL, "checkboard", "checker board grid", 0),
		(PF_GRADIENT, "gradient", "gradient", "Full saturation spectrum CCW"),
		(PF_FILE, "file", "file", "out.xcf.bz2"),
	],
	[],
	conformal_batch)

register(
	"conformal",
	"Colour representation of a conformal map",
	"Colour representation of a conformal map",
	"Michael J Gruber",
	"Michael J Gruber",
	"2012",
	"<Toolbox>/File/Create/_Conformal ...",
	"",
	[
		(PF_INT, "width", "width", 512),
		(PF_INT, "height", "height", 512),
		(PF_TEXT, "code", "code", "w=z"),
		(PF_TEXT, "constraint", "constraint", "p=True"),
		(PF_FLOAT, "xl", "x left", -1.0),
		(PF_FLOAT, "xr", "x right", 1.0),
		(PF_FLOAT, "yt", "y top", 1.0),
		(PF_FLOAT, "yb", "y bottom", -1.0),
		(PF_FLOAT, "grid", "grid spacing", 1.0),
		(PF_BOOL, "checkboard", "checker board grid", 0),
		(PF_GRADIENT, "gradient", "gradient", "Full saturation spectrum CCW"),
	],
	[],
	conformal)

main()

说明

添加一行文字以描述该文件所表现的内容

此文件中描述的项目

描繪內容

image/x-xcf

文件历史

点击某个日期/时间查看对应时刻的文件。

日期/时间缩⁠略⁠图大小用户备注
当前2015年8月16日 (日) 16:262015年8月16日 (日) 16:26版本的缩略图2,000 × 2,000(15.09 MB)DjibounUser created page with UploadWizard

以下页面使用本文件:

全域文件用途

以下其他wiki使用此文件: