Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Рекурсия присутствует?
И где эти прикрепленные файлы?
Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
Java
Среда программирования: 
IntelliJ IDEA 2017.3.4

package sample;
 
import java.util.Random;
 
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
 
public class Main extends Application {
 
    private static final int SPARKS = 1000; //количество искр
 
 
    private final Rectangle[] nodes = new Rectangle[SPARKS]; //хранит искры
    private final double[] angles = new double[SPARKS]; // хранит углы по которым они летят
    private final long[] start = new long[SPARKS]; // хранит частоту с которой вылетают искры
 
 
    private final Random random = new Random();
 
 
    @Override
    public void start(final Stage primaryStage) {
 
        for (int i = 0; i < SPARKS; i++) {
 
            Color[] colors = new Color[] { Color.GREEN, Color.YELLOW}; // цвета
            Color randomColor = colors[new Random().nextInt(2)]; // случайный выбор из двух цветов
 
            nodes[i] = new Rectangle(4, 2, randomColor); // присваиваем каждому элементу массива фигуру
            angles[i] = 2.0 * Math.PI * random.nextDouble(); // присваиваем каждому элементу массива угол
            start[i] = random.nextInt(2000000000); // присваиваем каждому элементу массива частоту
        }
 
        // окно
        final Scene scene = new Scene(new Group(nodes), 400, 400, Color.BLACK);
        primaryStage.setScene(scene);
        primaryStage.show();
        primaryStage.setResizable(false);
 
        // анимация
        new AnimationTimer() {
            @Override
            public void handle(long now) {
                final double width = 0.5 * primaryStage.getWidth(); // определяем точку из которой вылетают искры
                final double height = 0.5 * primaryStage.getHeight();
                final double radius = Math.sqrt(1.7) * Math.max(width, height); // определяем радиус на который вылетают искры
 
                // анимация для каждой фигуры
                for (int i = 0; i < SPARKS; i++) {
 
                    final Node node = nodes[i];
 
                    final double angle = angles[i];
                    final long t = (now - start[i]) % 2000000000;
                    // разброс искр
                    final double d = t * radius / 2000000000.0;
                    // перемещает искры
                    node.setTranslateX(Math.cos(angle) * d + width);
                    node.setTranslateY(Math.sin(angle) * d + height);
                }
 
            }
        }.start();
    }
 
    public static void main(String[] args) {
        launch(args);
    }
 
}

Прикрепленный файлРазмер
Sparks.zip14.48 кб