Датотека:Heat.gif
Извор: testwiki
Пређи на навигацију
Пређи на претрагу
Величина овог приказа: 754 × 599 пиксела. 4 друге резолуције: 302 × 240 пиксела | 604 × 480 пиксела | 966 × 768 пиксела | 1.200 × 954 пиксела.
Оригинална датотека (1.200 × 954 пиксела, величина датотеке: 2,66 MB, MIME тип: image/gif, петља, 30 кадрова, 3,0 с)
Напомена: због техничких ограничења, минијатуре GIF слика високе резолуције као што је ова неће се анимирати.
Ова датотека се налази на Викимедијина остава и може да се користи на другим пројектима. Њен опис је приказан испод.
Опис
| ОписHeat.gif |
English: Illustration of the Heat equation with a crescent moon as initial condition. |
| Датум | |
| Извор | Сопствено дело |
| Аутор | Nicoguaro. Based on File:Heat eqn.gif by en:User:Oleg Alexandrov |
| Остале верзије |
![]() |
| Изворни код InfoField | Python code"""
Illustration of the heat equation
Solve the heat equation using finite differences and Forward Euler.
Based on: https://commons.wikimedia.org/wiki/File:Heat_eqn.gif
"""
from __future__ import division, print_function
import numpy as np
from mayavi import mlab
import subprocess
path_to_convert = "C:\Program Files\ImageMagick-6.9.3\convert.exe"
def step_function(N, scale, X, Y, shape="crescent"):
"""Function that is 1 on a set and 0 outside of it"""
shapes = ["crescent", "cylinder", "hexagon", "superquadric", "smiley"]
if shape not in shapes:
shape = "crescent"
if shape == "cylinder":
Z = np.ones_like(X)
Z[X**2 + Y**2 < 0.5] = 0
Z[X**2 + Y**2 > 2] = 0
if shape == "superquadric":
Z = np.ones_like(X)
Z[np.abs(X)**0.5 + np.abs(Y)**0.5 > 1.5] = 0
if shape == "hexagon":
Z = np.ones_like(X)
hexa = 2*np.abs(X) + np.abs(X - Y*np.sqrt(3)) +\
np.abs(X + Y*np.sqrt(3))
Z[hexa > 6] = 0
if shape == "crescent":
c = 2
d = -1
e = 1
f = 0.5
k = 1.2
shift = 10
Z = (c**2 - (X/e - d)**2 - (Y/f)**2)**2 + k*(c + d - X/e)**3 - shift
Z = 1 - np.maximum(np.sign(Z), 0)
if shape == "smiley":
Z = np.ones_like(X)
fac = 1.2
x_eye = 0.5
y_eye = 0.4
bicorn = fac**2*(Y + 0.3)**2*(1 - fac**2*X**2) -\
(fac**2*X**2 - 2*fac*(Y + 0.3) - 1)**2
left_eye = (X + x_eye)**2/0.1 + (Y - y_eye)**2/0.4 - 1
right_eye = (X - x_eye)**2/0.1 + (Y - y_eye)**2/0.4 - 1
Z[X**2 + Y**2 > 2] = 0
Z[bicorn > 0] = 0
Z[left_eye < 0] = 0
Z[right_eye < 0] = 0
Z = scale * Z
return Z
def data_gen(num):
# Solve the heat equation with zero boundary conditions
for cont in range(ntime_anim):
Z[1:N-1, 1:N-1] = Z[1:N-1, 1:N-1] + dt*(Z[2:N, 1:N-1] +
Z[0:N-2, 1:N-1] + Z[1:N-1, 0:N-2] +
Z[1:N-1, 2:N] - 4*Z[1:N-1, 1:N-1])/dx**2
surf = mlab.surf(X, Y, Z, colormap='autumn', warp_scale=1)
# Change the visualization parameters.
surf.actor.property.interpolation = 'phong'
surf.actor.property.specular = 0.3
surf.actor.property.specular_power = 20
surf.module_manager.scalar_lut_manager.reverse_lut = True
surf.module_manager.scalar_lut_manager.data_range = np.array([ 0., scale])
return surf
N = 500 # Grid points
L = 2.5 # Box size
X, Y = np.mgrid[-L:L:N*1j, -L:L:N*1j]
scale = 2
Z = step_function(N, scale, X, Y, shape="crescent")
CFL = 0.125
dx = X[1, 0] - X[0, 0]
dy = dx
dt = CFL*dx**2
end_time = 0.05
time = np.arange(0, end_time, dt)
nframes = 50
ntime = time.shape[0]
ntime_anim = int(ntime/nframes)
#%% Plot frames
fname = "heat"
bgcolor = (1, 1, 1)
fig = mlab.figure(size=(1200, 1000), bgcolor=bgcolor)
fig.scene.camera.azimuth(180)
mlab.get_engine()
engine = mlab.get_engine()
scene = engine.scenes[0]
for cont in range(nframes):
mlab.clf()
surf = data_gen(cont)
scene.scene.camera.position = [-8, -8, 7]
scene.scene.camera.clipping_range = [7, 22]
scene.scene.camera.focal_point = [0, 0, 1]
print(cont)
mlab.savefig("{}_{n:02d}.png".format(fname, n=cont))
#%% Generate video
args = [path_to_convert, "-delay", "10", "-loop" , "0", fname + "_*.png",
fname + ".gif"]
subprocess.call(args, shell=True)
subprocess.call(["del", "/Q", fname + "*.png"], shell=True)
print("Done!")
|
Лиценцирање
Ја, носилац ауторског права над овим делом, објављујем исто под следећом лиценцом:
Ова датотека је доступна под лиценцом Creative Commons Ауторство 4.0 међународна.
- Дозвољено је:
- да делите – да умножавате, расподељујете и преносите дело
- да прерађујете – да прерадите дело
- Под следећим условима:
- ауторство – Морате да дате одговарајуће заслуге, обезбедите везу ка лиценци и назначите да ли су измене направљене. Можете то урадити на било који разуман манир, али не на начин који предлаже да лиценцатор одобрава вас или ваше коришћење.
Поднаписи
Укратко шта ова датотека представља/приказује
Animation of the heat equation with a crescent moon as initial condition.
Animación de la ecuación del calor con una media luna como condición inicial.
Ставке приказане у овој датотеци
приказује
неке вредности
16. мај 2017
image/gif
2.787.307 бајт
3 секунда
954 пиксел
1.200 пиксел
07900fef474dafbc79c213cb7fda9dbd859e8d06
Историја датотеке
Кликните на датум/време да бисте видели тадашњу верзију датотеке.
| Датум/време | Минијатура | Димензије | Корисник | Коментар | |
|---|---|---|---|---|---|
| тренутна | 04:12, 20. мај 2017. | 1.200 × 954 (2,66 MB) | wikimediacommons>Nicoguaro | User created page with UploadWizard |
Употреба датотеке
Следећа страница користи ову датотеку:
