Як побудувати поверхню 4D ділянки?


11

Я намагаюся побудувати хвильову функцію для частинки в 3D-коробці. Це вимагає від мене побудувати 4 змінні: осі x, y, z та функцію щільності ймовірності.

Функція щільності ймовірності:

abs((np.sin((p*np.pi*X)/a))*(np.sin((q*np.pi*Y)/b))*(np.sin((r*np.pi*Z)/c)))**2

Я використовую np.arange()для X, Y і Z.

Я прочитав, що для цього вам потрібно намалювати поверхню 4D ділянки. Ось як це має виглядати:

введіть тут опис зображення


3
Як щодо використання кольору для відображення щільності ймовірності?
Shuhao Cao

Я думаю, що непрозорість буде добре працювати для такого роду сюжетів. Можливо, вам потрібно буде надати різні точки зору кожного сюжету, але зробивши сюжет більш непрозорим там, де частинка, ймовірно, буде добре візуалізувати ці дані.
Годрік Провид

2
Оскільки це схоже на те, що ви використовуєте numpy, ви можете використовувати mayavi, щоб зробити фактичну змову. Документи мають приклад побудови скалярних даних у 3D .
jorgeca

Відповіді:


13

f(x,y,z)

Існує кілька способів візуалізації такого роду даних та безліч інструментів, які допоможуть вам. Я покажу вам кілька стилів сюжетів, які ви можете зробити.

  1. f(x,y,z)=(const.)

    У Mathematica,

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2 == 1/2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}]
    

    Показати поверхні постійної ймовірності 0,2, 0,5 та 0,8:

    ContourPlot3D[
     Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2,
     {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Contours -> {0.2, 0.5, 0.8}, 
     ContourStyle -> (Directive[#, Opacity[0.25]] & /@ {Yellow, Orange, Red}), 
     Lighting -> "Neutral", Mesh -> None]
    

  2. Можна виконати певний тип візуалізації гучності , можливо за допомогою вирізів та нарізки. Ви зможете призначити колір і непрозорість кожній точці 3D. Більш досконалі інструменти також дозволять вибрати функцію передачі.

    imgdata = 
      Table[Abs[Sin[\[Pi] x] Sin[\[Pi] y] Sin[\[Pi] z]]^2, 
        {x, -1., 1, .01}, {y, -1., 1, .01}, {z, -1., 1, .01}];
    
    img = Image3D[imgdata, ClipRange -> {{150, 200}, {0, 100}, {0, 200}}]
    

    Нарізка часто допомагає, особливо якщо ви можете інтерактивно керувати, який фрагмент відображати.

    Image3DSlices[img, Range[1, 200, 10]]
    

Ці приклади мали на увазі ідеї для того, які типи візуалізацій можна спробувати створити. Існує безліч різних безкоштовних та комерційних інструментів, які можна використовувати для створення сюжетів.


9

Традиційний підхід для скалярних польових даних (температура, величина швидкості, тиск, щільність тощо), побудовані на двох-трьох просторах, використовує колір. Важливо зауважити, що вибір колірної гами може спотворити ваші враження від даних. З цієї причини не використовуйте кольорову гаму веселки. (Чому дивіться тут , тут , тут і тут .) На жаль, веселка є кольоровою схемою за замовчуванням у MATLAB та matplotlib.

Якщо ви намагаєтеся виділити зміни інтенсивності, добре працює схема, що відрізняється насиченістю, як та, яка коливається від білого (нульова щільність) до чорного (максимальна щільність). Прозорість також може добре працювати. Хитра проблема з 3-D графіками при використанні кольору полягає в тому, що вам потрібно буде переглянути дані з різних точок зору, щоб отримати більш повне уявлення про тенденції та особливості; Вам також може знадобитися нарізати скибочки.


Так, кольоровий сюжет не зробить, ви праві. Будь-яка ідея, яку функцію я б використовував для цього тоді?
ріпа

2
Ви маєте на увазі функцію в Python? Є кілька бібліотек, які добре працюють для побудови графіків. Matplotlib зазвичай використовується для двовимірних сюжетів, а не для 3D-ділянок; ggplot та Bokeh мають подібні випадки використання. Mayavi2, як запропонував jorgeca, добре підходить для 3D-побудови. Я, як правило, віддаю перевагу програмним пакетам для візуалізації 3D-даних, таких як ParaView або VisIt. Ви також можете подивитися на yt (який базується на Python) і добре спрацює побудову 3D-даних. Будь-яка гідна бібліотека візуалізації повинна дати вам декілька варіантів кольорових масштабів, непрозорості, насиченості тощо
Geoff Oxberry
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.