Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2024, 11:11   #51
MallSerg
 
Аватар для MallSerg
 
Регистрация: 17.08.2024
Сообщений: 9
По умолчанию

Монте карло ваще ни к селу ни к городу. )
MallSerg вне форума Ответить с цитированием
Старый 01.10.2024, 03:49   #52
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 226
По умолчанию

Решил зайти с тыла нашел 2d лавовую лампу у одно чела, и решил её переписать в 3d но получилась лампа с мушками:

Код:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

class Ball:
    def __init__(self, x, y, z, vx, vy, vz, radius):
        self.x = x
        self.y = y
        self.z = z
        self.vx = vx
        self.vy = vy
        self.vz = vz
        self.radius = radius

    def update(self):
        self.x += self.vx
        self.y += self.vy
        self.z += self.vz

        if self.x < 0 or self.x > 100:
            self.vx *= -1
        if self.y < 0 or self.y > 100:
            self.vy *= -1
        if self.z < 0 or self.z > 100:
            self.vz *= -1

    def get_position(self):
        return self.x, self.y, self.z

class LavaLamp:
    def __init__(self, num_balls):
        self.num_balls = num_balls
        self.balls = []

        for i in range(num_balls):
            x = np.random.uniform(0, 100)
            y = np.random.uniform(0, 100)
            z = np.random.uniform(0, 100)
            vx = np.random.uniform(-1, 1)
            vy = np.random.uniform(-1, 1)
            vz = np.random.uniform(-1, 1)
            radius = np.random.uniform(1, 5)

            self.balls.append(Ball(x, y, z, vx, vy, vz, radius))

    def update(self):
        for ball in self.balls:
            ball.update()

    def get_positions(self):
        positions = []

        for ball in self.balls:
            positions.append(ball.get_position())

        return positions

def main():
    num_balls = 100
    lamp = LavaLamp(num_balls)

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    for i in range(100):
        lamp.update()
        positions = lamp.get_positions()

        ax.clear()
        ax.set_xlim(0, 100)
        ax.set_ylim(0, 100)
        ax.set_zlim(0, 100)

        for position in positions:
            ax.scatter(position[0], position[1], position[2], c='r', marker='o', s=10)

        plt.pause(0.01)

    plt.show()

if __name__ == "__main__":
    main()
MakarovDs на форуме Ответить с цитированием
Старый 01.10.2024, 05:43   #53
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 226
По умолчанию

Давайте исправим этот недостаток:

Код:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

class Ball:
    def __init__(self, x, y, z, vx, vy, vz, radius):
        self.x = x
        self.y = y
        self.z = z
        self.vx = vx
        self.vy = vy
        self.vz = vz
        self.radius = radius

    def update(self):
        self.x += self.vx
        self.y += self.vy
        self.z += self.vz

        if self.x < 0 or self.x > 100:
            self.vx *= -1
        if self.y < 0 or self.y > 100:
            self.vy *= -1
        if self.z < 0 or self.z > 100:
            self.vz *= -1

    def get_position(self):
        return self.x, self.y, self.z

class LavaLamp:
    def __init__(self, num_balls):
        self.num_balls = num_balls
        self.balls = []
        self.size_factors = [1, 2, 3, 4, 5]
        self.probabilities = [0.4, 0.3, 0.2, 0.08, 0.02]  # Корректируйте эти вероятности по мере необходимости

        for i in range(num_balls):
            x = np.random.uniform(0, 100)
            y = np.random.uniform(0, 100)
            z = np.random.uniform(0, 100)
            vx = np.random.uniform(-1, 1)
            vy = np.random.uniform(-1, 1)
            vz = np.random.uniform(-1, 1)

            size_factor = np.random.choice(self.size_factors, p=self.probabilities)
            radius = size_factor

            self.balls.append(Ball(x, y, z, vx, vy, vz, radius))

    def update(self):
        for ball in self.balls:
            ball.update()

    def get_positions(self):
        positions = []

        for ball in self.balls:
            positions.append(ball.get_position())

        return positions

def main():
    num_balls = 100
    lamp = LavaLamp(num_balls)

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    for i in range(100):
        lamp.update()
        positions = lamp.get_positions()

        ax.clear()
        ax.set_xlim(0, 100)
        ax.set_ylim(0, 100)
        ax.set_zlim(0, 100)

        for position in positions:
            ax.scatter(position[0], position[1], position[2], c='r', marker='o', s=lamp.balls[positions.index(position)].radius ** 2 * 10)

        plt.pause(0.01)

    plt.show()

if __name__ == "__main__":
    main()
Теперь это больше похоже на лавовую лампу


Последний раз редактировалось MakarovDs; 01.10.2024 в 05:46.
MakarovDs на форуме Ответить с цитированием
Старый 01.10.2024, 10:35   #54
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 226
По умолчанию

Короче решил сделать бесконечную процедурно генерируемую лавовую лампу на Babylon.js вот что у меня получилось:

ССЫЛКА

Как вам моя лавовая лампа? Перемещение с помощью стрелок.

Вот вторая версия

Последний раз редактировалось MakarovDs; 01.10.2024 в 21:11.
MakarovDs на форуме Ответить с цитированием
Старый 02.10.2024, 02:34   #55
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 226
По умолчанию

Я В БЕСКОНЕЧНОЙ ЛАВОВОЙ ЛАМПЕ UwU



Это уже третья версия лавовой лампы!



Как вам!?

Последний раз редактировалось MakarovDs; 02.10.2024 в 07:17.
MakarovDs на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компьютерное моделирование, моделирование физических процессов. (в Excel ) Dytchi Помощь студентам 0 06.02.2012 15:54
моделирование RGB Traffka Помощь студентам 1 20.10.2010 17:08
Формула по квантовой физике StudentPolitech Свободное общение 1 18.09.2009 01:36
Вопрос на засыпку по квантовой физике. Kostia Помощь студентам 5 26.10.2008 00:20