Вы читаете vadim_kataev

Artificial Intelligence Review - Beauty of complex functions [entries|archive|friends|userinfo]
vadim_kataev

[ website | Technopedia ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Beauty of complex functions [янв. 25, 2008|12:52 pm]
Previous Entry В избранное Поделиться Next Entry
[Tags|, , , ]

The complex numbers help to solve many engineering problems. They form a
superset of real numbers, an algebraical structure that has many useful
properties.

Each complex number is an ordered pair of real numbers. Complex
numbers are well supported by Python (and even natively), so that it
simplifies many computational tasks. In what follows we will see some really
exciting applications in the 2D Image Transformation.

A 2D digital image is an array of points, where each point has unique
2D coordinate and RGB color values p=(x,y,RGB)

Complex plane is a 2D coordinate system. Each pixel of a 2D digital image
is uniquely associated with a complex number z on the complex plane. For
example, if some p=(a,b,RGB) then it's ok to view some z=a+bj.

We could then apply a complex function f(z) for each z to get a new transformed
2D digital image. We just map each pixel with coordinate z onto coordinate w:
(a,b,RGB) -> (a',b',RGB)

This is our original image, w = z





Let's apply such function that will create reflection of each pixel about the real axis. This is so called conjugation of the complex number and it's defined as (a+bj) -> (a-bj). Python provides each member of the type complex with a function conjugate:

w = z.conjugate()





Ok. Let's try to rotate our original image. Rotation in complex plane is so easy that you could even think that it's a kind of magic, but the real magic is the famous Euler's identity:
ej*pi + 1 = 0

Euler's identity is considered to be the most beautiful mathematical equation because it binds pi, e, 1, 0, imaginary number, multiplication, addition, and equality together.

What Euler's identity comes from is rotation in complex plane. In order to rotate any z around (0+0j) we just have to multiply z with ej*angle, where angle is to be given in radians. You could easily check it yourself on a Python's console. Let's see what happens if we switch places of pi and e.

This is w = z * pi ** (1j*e)





Python has a library of standard mathematical functions to deal with complex numbers called cmath. From now on we assume we've done:
from cmath import *
Let's see how it's easy to create a simple lens-effect:

z * cos(z.real/140) * cos(z.imag/140)





Natural logarithm in complex plane is an inverse mapping of the rotation. Let's transform our original image with:

w = log(z)*30





Simple beautiful function:

w = z * (-1)**z.real





Well done! Now you can "feel" the topology of complex numbers better. If no, there is still a lot of beautiful transformations. For example, can you recognize a galaxy on the next image?

w = z * e**(1j*z.imag)





w = z * e**(1j*z.real)





Let's mix them both. They form fascinating image of a fast rotational "something". It looks like a semi-chaotic "something". Can you explain why it has 25 line ends out of visible circle?

w = z * e**(1j*z.imag + 1j*z.real)





Can you see the origin of a fractal on the next image? Try to zoom.

w = z**5j + z**4j + z**3j + z**2j + z





Square root shows very funny "circularity", as if it tears a square-topology image in attempt to achieve the circularity. This transformation is remarkable because it is an injective function, so that an area of transformed image is equal to original one. Guess what should be an inverse transformation for that one.

w = z + z**0.5





And finally, my favorite one. Let's create a pure rotational chaos!

What function is it? Guess it. Find inverse one.
СсылкаОтветить

Comments:
[User Picture]From: vadim_kataev
2008-01-25 02:58 pm none (UTC)

(Link)

My excuse for my Russian readers, I am just incompetent in the Russian math terminology.
From: ded_flint
2008-01-25 03:06 pm none (UTC)

(Link)

оригинальный текст - твой?
[User Picture]From: vadim_kataev
2008-01-25 03:18 pm none (UTC)

(Link)

в этом журнале я пишу только мои тексты
[User Picture]From: bopox
2008-01-25 03:07 pm none (UTC)

(Link)

в шестом классе подобным образом развлекались на logo writer =)
[User Picture]From: vadim_kataev
2008-01-25 03:41 pm none (UTC)

(Link)

здорово, ты уже в каком сейчас?
[User Picture]From: bopox
2008-01-25 03:42 pm none (UTC)

(Link)

в 20-м
[User Picture]From: _winnie
2008-01-26 01:22 am none (UTC)

(Link)

На фрактал Мандельброта и прочий абстрактный Computer Generated Art из линий - у меня уже не стоит :)
[User Picture]From: alogic
2008-01-26 01:28 pm none (UTC)

(Link)

Мне понравилось, правда я думал, что вы учились ещё в России.
[User Picture]From: __k_y_l_e__
2008-02-06 08:59 pm none (UTC)

(Link)

this is really cool.
[User Picture]From: fregimus
2008-02-09 10:31 pm none (UTC)

(Link)

Вадим, Вы меня просили на это посмотреть. Буду смотреть по частям, сильно бываю занят.

I. У Вас с \[ z'=z \pi ^{i e} \] путаница вышла. Вы ведь можете переписать это выражение как \[ w = z e^{i e \ln(\pi)} \]. Аргумент его будет \[ \theta = e \ln(\pi) ]\, а численное значение, пусть будет в градусах, \[ \frac{180 \theta}{\pi} \approx 178^{\circ} \], а у Вас — на глаз — что-то около \[ -90 ]\ :)

II. Всякие торчки из круглой картины получаются из-за дискретности изображения. Функция Ваша \[ w = z e^{i \(\operatorname{Im}(z) + \operatorname{Re}(z)\) \] поворачивает кольцо с центром в \[ z = 0 \] тем больше, чем больше диаметр этого кольца. Как я понял, у Вас 1 пиксел = 1, так что каждое следующее кольцо повернуто на \[ \pi \], то есть почти на 60°! Естественно в таком раскладе, что из-за дискретизации Вы чего только не получите.

Вы рассмотрите лучше эту функцию так. Во-первых, цена пиксела должна быть не больше 1/20. Во-вторых, катринка с конусом и шаром тут будет сбивать. Обратите внимание, что эта функция «нарезает» исходную область на линии \[ x + y = \text{const} \], поэтому для исследования возьмите квадрат, «переливающийся» спектром из нижнего левого в верхний правый угол, то есть где для каждой точки \[ \{x,y,c\} \] цвет определяется как \[ c = \operatorname{hue}(x + y) \], где hue(u) определена на всем интервале (нормируйте), и выдает некую плавную цветовую шкалу. Должно быть, грубо говоря, так, если обозначить цвета спектра RYGCBM,
C C B B M M
G C C B B M
G G C C B B
Y G G C C B
Y Y G G C C
R Y Y G G C
R R Y Y G G
Вы вот так с ней поиграйте — будет, думаю, интересно, потому что прямые диагонали одного цвета останутся прямыми после трансформации. Картинки покажите. :-)

Пока у меня времени больше нет, если Вам интересно, подумаю над остальным.

И еще. Вы бы писали все-таки по-русски, а то по-английски — сами чувствуете ведь — так себе пока еще получается, ошибок многовато. Тут терминов-то десять штук без ста, да половина все равно латинские, как и в английском, их выучить раз плюнуть, если уж Вы анализ функций комлексных переменных освоили, правда? :-) Хотите — скажу Вам, как что переводится, Вы только спрашивайте.
[User Picture]From: newtricker
2008-10-28 01:27 am none (UTC)

(Link)

Это информационный вирус
http://newtricker.livejournal.com/62683.html

он ранее уже запускался в блогосферу, тут о нем статья
http://www.duel.ru/200131/?31_4_2