Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
9 / 9 / 3
Регистрация: 24.01.2015
Сообщений: 79
Записей в блоге: 6

Матрицы с комплексными числами для вычисления расстояний, 2D

20.05.2016, 23:43. Показов 2822. Ответов 4

Студворк — интернет-сервис помощи студентам
Комплексные числа, вместе с матрицами, хорошо помогают в 2D графике.

Пример взят из области интерференции волн.

Из комплексных чисел строим сетку.
Вычисляем расстояния от излучателей до узлов сетки, и берем синус от этого расстояния, что обеспечивает картину интерференции.

Четыре точки излучатели расположены равномерно по окружности.
При отображении точки также видны.
С увеличением радиуса окружности, меняется картина интерференции.

300 изображений записываются на диск.
Смотреть лучше программой FSViewer , и получается лучше кинофильма,
т.к. колесиком мыши можно менять направление просмотра

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
   #!/usr/bin/env python
   import numpy as np
   import matplotlib.cm as cm
   import matplotlib.pyplot as plt
   import math
   import cmath
 
   # Размер сетки
   razner=400
 
 
   # Нулевая матрица комплексных чисел 
   k=np.zeros((razner, razner), dtype=np.complex)
 
   # Заполнение сетки  расстояниями
   for kx in range (razner):
      for ky in range (razner):
             
          k[kx,ky]=kx+(ky)*1j       
 
   # Для примера берем 4 точки  (излучатели) равномерно по окружности. 
   # tx ty ,координаты центра окружности  
   tx=111
   ty=111
 
 
 
   # Будем изменять радиус окружности от 1 до 100 через 1
   for r in range (1,300,1):
      print r 
      plt.close()
 
   # Маркер начала окружности
      plt.plot(tx,ty,linestyle='',marker=',',markersize=10, markerfacecolor='#0000FF')
 
 
   # u1 i2 u3 u4 углы точек по окружности
      mn=0.951
      u1=0
      u2=mn*math.pi/2
      u3=mn*math.pi
      u4=mn*math.pi*1.5
 
 
 
      s=0
      m=1
   # mx  my, координаты точек 
      my1=((tx+r*math.sin(u1))-s)*m
      mx1=((tx+r*math.cos(u1))-s)*m
 
      my2=((tx+r*math.sin(u2))-s)*m
      mx2=((tx+r*math.cos(u2))-s)*m
 
      my3=((tx+r*math.sin(u3))-s)*m
      mx3=((tx+r*math.cos(u3))-s)*m
 
      my4=((tx+r*math.sin(u4))-s)*m
      mx4=((tx+r*math.cos(u4))-s)*m
 
   # Из каждой точки матрицы сетки вычитаем координаты точки, получим матрицу векторов  от
   # точки излучателя до каждой точки сетки
      L1=k-tx+r*math.sin(u1)-(ty+r*math.cos(u1))*1j
 
   # Маркер первой точки
      plt.plot(mx1,my1,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
      
 
      L2=k-tx+r*math.sin(u2)-(ty+r*math.cos(u2))*1j
      plt.plot(mx2,my2,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
 
      L3=k-tx+r*math.sin(u3)-(ty+r*math.cos(u3))*1j
      plt.plot(mx3,my3,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
 
      L4=k-tx+r*math.sin(u4)-(ty+r*math.cos(u4))*1j
      plt.plot(mx4,my4,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
   # Складываем синусы от длин для каждой точки излучателя.
   # Качественно в максимумах и минимумах это аналогично интерференции
   #
   # Второе и треть слагаемое с отрицательной фазой, (красивей получается картина ) 
      
      Z = np.sin(0.1*np.abs((L1)))-np.sin(0.1*np.abs((L2)))-np.sin(0.1*np.abs((L3)))+np.sin(0.1*np.abs((L4)))
 
      im = plt.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,
                      origin='lower',
                      vmax=abs(Z).max(), vmin=-abs(Z).max())
 
   # запись на диск изображений
      plt.savefig("d:/1626/V"+str(r)+".png")
    
   # Если смотреть программой FSViewer , получается лучше кинофильма, 
   # колесиком мыши можно менять направление просмотра
Изображения
     
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2016, 23:43
Ответы с готовыми решениями:

Вычисления с комплексными числами
Собственно вот формула: y2=\frac{-u+v}{2}+i\frac{\sqrt{3}(u-v)}{2} Все данные известны кроме i. Как мне объяснили это комплексное...

Вычисления с комплексными числами
Есть решенный пример такого вида: R=(R1*R2)/(R1+R2) = (100*100i)/(100 + 100i) = 50 + 50i. Числа комплексные. Каким образом был получен этот...

Вычисления с комплексными числами
Помогите пожалуйста с данными заданиями! В принципе, они, вроде, похожи, поэтому буду очень рад разбору хотя бы одного. Спасибо.

4
9 / 9 / 3
Регистрация: 24.01.2015
Сообщений: 79
Записей в блоге: 6
21.05.2016, 07:05  [ТС]
Подробней про матрицы и комплексные числа.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
>>> import numpy as np
>>> import cmath
 
>>> a = np.array([[ 0.+0.j,  0.+1.j],[1.+0.j,  1.+1.j]], dtype=np.complex)
>>> a
    array([[ 0.+0.j,  0.+1.j],
           [ 1.+0.j,  1.+1.j]])
 
>>> n=0+0j
 
>>> L=a-n
 
>>> L
    array([[ 0.+0.j,  0.+1.j],
           [ 1.+0.j,  1.+1.j]])
>>> abs(L)
    array([[ 0.        ,  1.        ],
           [ 1.        ,  1.41421356]])
 
 
 
 
 
>>> n=0.5+0.5j
>>> n
   (0.5+0.5j)
 
>>> L=a-n
 
>>> abs(L)
    array([[ 0.70710678,  0.70710678],
           [ 0.70710678,  0.70710678]])
0
9 / 9 / 3
Регистрация: 24.01.2015
Сообщений: 79
Записей в блоге: 6
23.07.2016, 15:21  [ТС]
Матрицами можно решать задачи оптимизации, и найти:
Минимум суммы расстояний до вершин треугольника.


Есть точное решение задачи минимума суммы расстояний, с углами 120 градусов, построением на сторонах равносторонних треугольников, и получением точки пересечения окружностей, полученных по точкам новых треугольников.

Решение матрицами дает наглядную картинку расстояний и точку минимума.

Чем темнее красный, тем меньше сумма.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python
 
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import math
import cmath
 
# Размер сетки
razner=400
 
# Нулевая матрица комплексных чисел 
k=np.zeros((razner, razner), dtype=np.complex)
 
# Заполнение сетки расстояниями
for kx in range (razner):
    for ky in range (razner):
        k[kx,ky]=kx+(ky)*1j 
 
# tx ty ,координаты центра окружности 
tx=200
ty=200
 
# Будем изменять угол одной точки на окружности.
 
for uxx in range (1,628,10):
 
    ux=uxx/100.0
    r=150 
    plt.close()
 
# Маркер начала окружности
    plt.plot(tx,ty,linestyle='',marker=',',markersize=10, markerfacecolor='#0000FF')
 
    u1=0
    u2=math.pi/2
    u3=ux
 
    s=0
    m=1
 
# mx my, координаты точек 
 
    my1=((tx+r*math.sin(u1))-s)*m
    mx1=((tx+r*math.cos(u1))-s)*m
 
    my2=((tx+r*math.sin(u2))-s)*m
    mx2=((tx+r*math.cos(u2))-s)*m
 
    my3=((tx+r*math.sin(u3))-s)*m
    mx3=((tx+r*math.cos(u3))-s)*m
 
# L1, L2, L3 это вектора из текущей точки прямоугольника до точек 1, 2, 3
 
# L1, L2, L3 это матрицы с комплексными числами
 
# np.abs(L1) это матрицы с числами длины вектора (расстояние) 
 
    L1=k-tx-r*math.sin(u1)-(ty+r*math.cos(u1))*1j
# Маркер первой точки
    plt.plot(mx1,my1,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
    L2=k-tx-r*math.sin(u2)-(ty+r*math.cos(u2))*1j
    plt.plot(mx2,my2,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
    L3=k-tx-r*math.sin(u3)-(ty+r*math.cos(u3))*1j
    plt.plot(mx3,my3,linestyle='',marker='.',markersize=10, markerfacecolor='#0000FF')
 
#Вычисляем сумму расстояний от каждой точки прямоугольной сетки до трех точек.
 
#Чем краснее, тем меньше сумма расстояний, и в этой точке должны сойтись три дорожки для минимума расхода #материала. 
 
    Z = np.abs(L1)+np.abs(L2)+np.abs(L3)
    im = plt.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,
            origin='lower',
            vmax=1200, vmin=200)
 
# запись на диск изображений
    plt.savefig("d:/1626/V"+str(uxx)+".png")
 
# Если смотреть программой FSViewer , получается лучше кинофильма, 
# колесиком мыши можно менять направление просмотра
GIF анимация из картинок отдельно.

Картинки для анимации можно также получить захватами экрана программой autopy, которая может выполнять и поиск в загруженных изображениях.
import autopy
zast=autopy.bitmap.capture_screen()
zast.save("D:/za"+str(uu)+".png","png")
Миниатюры
Матрицы с комплексными числами для вычисления расстояний, 2D  
Вложения
Тип файла: zip Три дороги.zip (710.3 Кб, 4 просмотров)
Тип файла: zip dor bez nakio.zip (1.5 Кб, 3 просмотров)
0
9 / 9 / 3
Регистрация: 24.01.2015
Сообщений: 79
Записей в блоге: 6
23.07.2016, 15:30  [ТС]
GIF файл
Изображения
 
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
24.07.2016, 22:34
Лысанов Виталий, Вы бы это у себя в блоге разместили, тут затеряется со временем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2016, 22:34
Помогаю со студенческими работами здесь

Определить процедуры вычисления арифметических операций над комплексными числами
Помогите написать программу на Python. Задание : Даны действительные числа u1,u2,v1,v2,w1,w2. Получить 2u+((3uv)/(2+w-u))-7, где u,v,w -...

Функции для работы с комплексными числами
Описать тип-структуру «комплексное число», хранящую действительную и мнимую части комплексного числа. Описать функции для умножения...

Программа для операций с комплексными числами
На базе приведенного ниже класса и примера его использования надо реализовать программу работы с комплексными числами, что бы выполнялись...

Модуль для работы с комплексными числами
не могу решить нуждаюсь в помощи Разработать модуль, содержащий процедуру сложения двух комплексных чисел в тригонометрической форме

Класс для работы с комплексными числами
Описать класс для работы с комплексными числами. Обеспечить следующие возможности:  ввод комплексного числа в алгебраической...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru