Ищется формула 3D поверхности

Romyk

Подскажите формулу типа z=f(x,y которая бы давала что-то типа поверхности из картинок. Ничего умнее z=sinc(a*x^2 + b*y^2) не придумывается, но это дает поверхность типа на картинке слева, а надо еще асимметрия (типа как получается в эффекте допплера) в одном направлении (картинка справа).

На картинке еще фаза есть, мне не надо, но было бы интересно.

Картинки отсюда http://www.rhythmodynamics.com/Gabriel_LaFreniere/sa_spheric...
Сайт стремный, но это к делу не относится.

BSCurt

Ну собственно из постановки задачи решение казалось бы такое
Z=Sin[ Sqrt[ ( x^2+y^2 ) / ( 1+v^2-2 v x/Sqrt(x^2+y^2) ) ] ]
x/Sqrt(x^2+y^2) - это косинус угла между осью х и радиус-вектором из в (x,y)
v - скорость движения

BSCurt

Хотя выглядит несколько подозрительно при 1/2<v<1.

Romyk

спасибо, но рисуется что-то не то. на wolphramalpha это не очевидно. :(

BSCurt

Ну не знаю, я мог накосячить с выводом, но там в общем понятно как это выводить можешь пересчитать.

Romyk

спасибо! похоже со скобками где-то накосячил, теперь вроде нормально :)
вот скрипт на питоне, кажет то что надо (в районе нуля надо подчистить)
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random
from math import sin, sqrt
def fun(x, y):
a = 3
b = 8
v = 0.3
zz = sqrt(a * x ** 2 + b * y ** 2)
dx = 1 + v ** 2 - 2 * v * sqrt(a) * x / zz
return sin(zz / dx) / zz
fig = plt.figure
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-5.0, 5.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x, y) for x, y in zip(np.ravel(X np.ravel(Y])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
plt.show

BSCurt

А не кажись я таки накосячил - маетматикой заниматься после 21 вредно и контрпродуктивно
правильная форумула такая
Sin[ (-v x - Sqrt [x^2 + y^2 - v^2 y^2 ]) / (-1 + v^2) ]


Вывод такой пусть
x, y это координаты неподвижной системы коордиант
x' y' движущейся со скоростью v вдоль х
x' =x - v t
y' = y
считаем что волна от источника распространяется с единичной скоростью
тогда
колебание в точке x,y
есть Sin(t где
t=sqrt(x^2+y^2)
имеем
t^2 = x^2 + y^2
нас интересует переписать это в x' y'
t^2 = (x' + t v)^2 + y' ^2
получаем уравнение
x'^2 + y'^2 + 2 t v x' + t^2 (v^2-1)=0
находим
t_1=-v x - Sqrt [x^2 + y^2 - v^2 y^2 ]) / (-1 + v^2)
t_2=-v x + Sqrt [x^2 + y^2 - v^2 y^2 ]) / (-1 + v^2)
соответствует разным направлениям движения
подставляем в синус, вроде так.
По крайней мере картинка больше не такая подозрительная

Arthur8

это кома или каустика в оптике
Оставить комментарий
Имя или ник:
Комментарий: