1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tanling8334-Matplot3D-for-Java

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.MD

Matplot3D for Java

概述

В области данных науки и инженерии, визуализация данных является ключевым инструментом для понимания и обмена сложной информацией. Если вы являетесь разработчиком на Java, ищущим мощный, локализованный инструмент для трёхмерного графического отображения, то Matplot3D for JAVA (V5.0) может быть вам интересен. Этот компонент предназначен для предоставления разработчикам на Java возможностей, аналогичных тем, что предоставляет Python-библиотека Matplotlib, позволяя легко создавать впечатляющие трёхмерные графики.

Matplot3D for JAVA (V5.0) — это компонент для создания трёхмерных графиков, разработанный на основе среды Java SE. Компонент упакован в jar-файл размером чуть более 300 КБ. Он включает в себя собственные алгоритмы и инструменты для построения и визуализации трёхмерной геометрии, не требуя зависимости от OpenGL, DirectX, Java 3D или JavaFX. Вместо этого он опирается на встроенные классы JRE.

Matplot3D for JAVA (V5.0) предлагает простой и понятный API, который позволяет даже разработчикам без большого опыта в визуализации данных быстро начать создавать интерактивные приложения для визуализации. Он может использоваться в таких областях, как визуализация больших данных и анализ научных данных. Благодаря использованию встроенных графических фреймворков Java, он обеспечивает хорошую кроссплатформенную совместимость и лёгкую интеграцию в собственные программы с графическим интерфейсом на Java. Также возможно создание изображений или файлов непосредственно на сервере для динамических веб-страниц.


Применение

  • Образование и исследования: демонстрация математических моделей, физических явлений и данных.
  • Анализ данных: визуализация трёхмерных данных для выявления скрытых закономерностей.
  • Другие приложения и системы на Java, требующие визуализации данных.

Файлы пакета

  • Matplot3d_4j_sydh_x64_V5.0.jar: файл, необходимый для использования приложения.
  • Matplot3d_4j_sydh_x64_V5.0_demo.jar: исполняемый jar-файл с демонстрацией и примерами кода. Не требуется для использования, но может быть запущен двойным щелчком на компьютере с установленной 64-битной JRE (или через командную строку или пакетный файл). Команда для запуска: «C:\Program Files\Java....ваш путь к установке Java...\bin\java.exe» -jar Matplot3d_4j_sydh_x64_V5.0_demo.jar.

Контакты автора

email: ta8334@126.com ; QQ : 17746302


Демонстрация эффектов

Структура молекулы C60

Структура молекулы C60

Векторное поле заряда

Векторное поле заряда

Данные о рельефе

Данные о рельефе

Сетчатая поверхность

Пример простого кода:

public class MobiusStripDemo {
    public static void main(String[] args) throws Exception {

        GridMeshProcessor processer = new GridMeshProcessor();

        Matplot3D4JMgr matPlot3DMgr = new Matplot3D4JMgr(processer);

        GridMeshMapper f = new GridMeshMapper() {

            public Point3D f(double d1, double d2) {

                double sita = d1;
                double offset = d2;

                double baseR = 12;// радиус

                double r = 3.6 * Math.cos(sita * 3 / 2) + baseR;

                double fai;// угол поворота

                fai = sita * 1.75;// угол поворота равен углу ориентации * 1,75

                double x = (r + (offset * Math.cos(fai))) * Math.cos(sita);
                double y = (r + (offset * Math.cos(fai))) * Math.sin(sита);
                double z = offset * Math.sin(fai) + 3.6 * Math.sin(sita * 3 / 2);

                return new Point3D(x, y, z);
            }

            public void setAdditionalPrar(Object additionalprar) {}
        };

        double[] sita = FunctionSpaceUtil.lineSpace(0, Math.PI * 4, 300);

        double[] offset = FunctionSpaceUtil.lineSpace(-3.1, 3.1, 5);

        processer.addData(f, sita, offset, "1",new TopBottomColorStyle(ColorStyle.DEFAULT_COLORS_REVERSE_ARRAY) ,1f);

        matPlot3DMgr.setCoordianteSysShowType(matPlot3DMgr.COORDINATE_SYS_ALWAYS_FURTHER);
        matPlot3DMgr.setTitle("Mobius strip demo");

        matPlot3DMgr.show();
    }
}

Поверхности Мёбиуса

Линии потока векторного поля

Простой пример кода:

public class SimpleVectorFieldDemo {
    public static void main(String[] args) {

        VectorFieldProcessor processer = new VectorFieldProcessor();

        Matplot3D4JMgr matPlot3DMgr = new Matplot3D4JMgr(processer);

        Vector3D v1 = new Vector3D(1, 0, 0);
        Vector3D v2 = new Vector3D(-0.1, 0, 0);
        Vector3D vNull = new Vector3D(0, 0, 0);

        class MyMapper1 implements Point3dVector3dMapper {
            public Vector3D f(Point3D p) {
                if (p.y() > 0) {
                    return v1;
                } else {
                    return vNull;
                }
            }

            public void setAdditionalPrar(Object additionalprar) {}
        }

        class MyMapper2 implements Point3dVector3dMapper {
            public Vector3D f(Point3D p) {
                if (p.y() < 0) {
                    return v2;
                } else {
                    return vNull;
                }
            }

            public void setAdditionalPrar(Object additionalprar) {}
        }

        processer.addData(new MyMapper1(), "1",

``` **Цвет.КРАСНЫЙ, новый Диапазон(-9, 9), новый Диапазон(-9, 9), новый Диапазон(-9, 9));**

    **processer.addData(новый MyMapper2(), "2", Цвет.СИНИЙ, новый Диапазон(-9, 9), новый Диапазон(-9, 9), новый Диапазон(-9, 9));**  

    List<Point3D> seeds = new ArrayList<Point3D>();

    for (double z = -9; z <= 9; z += 1.2) {
        for (double y = -9; y <= 9; y += 1.2) {
            seeds.add(new Point3D(0, y, z));
        }
    }

    processer.setPropertyToAll("seeds", seeds);
    processer.setPropertyToAll("alphaNoise", 0.0);

    matPlot3DMgr.setTitle("Векторное поле линий потока");
    matPlot3DMgr.setAppearanceTheme(Matplot3D4JMgr.APPEARANCE_THEME_DARK);

    matPlot3DMgr.setCoordianteSysShowType(Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);

    matPlot3DMgr.showMotion(-1, 15, 0);
}

Данные массива поверхности

Рисунок 1. Данные массива поверхности

Простой пример кода:

public class FunctionSurfaceDemo {

    public static void main(String[] args) {

        DataGridProcessor processor = new DataGridProcessor();

        final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);     

        //Определяем двумерную функцию, в соответствии с xy значениями вычисляем y значения
        Function f = new Function() {
            public Double f(double x, double y) {
                return Math.sin(y * x / 2.2) * 0.8;
            }
        };

        double pi = Math.PI;

        //Добавляем двумерную функцию в обработчик, устанавливаем диапазоны отображения XY и количество сегментов выборки
        Range rangeX = new Range(-1.5 * pi, 1.5 * pi);
        Range rangeY = new Range(-1.5 * pi, 1.5 * pi);

        // Добавляем двумерную функцию в обработчик, задаём диапазоны отображения X и Y и количество сегментов выборки
        processor.addData(FunctionSpaceUtil.getDataByFunction(f, rangeX, rangeY, 60, 60), "", rangeX, rangeY, new TopBottomColorStyle(Colors.Jet), 1f);

        processor.setPropertyToAll("isDoubleSide", true);

        mgr.setScaleZ(1.5);
        mgr.setScaleX(1.3);
        mgr.setScaleY(1.3);

        mgr.setElevation(1.3);
        mgr.setAzimuth(1.1);

        mgr.setTitle("Demo : Построение функции поверхности [ z = 0.8 * sin(y*x/2.2)]");

        mgr.setCoordianteSysShowType(mgr.COORDINATE_SYS_ALWAYS_FURTHER);

        mgr.show();
    }
} 

Общая сетка

Рисунок 2. Общая сетка

Облачная поверхность

Рисунок 3. Облачная поверхность

Простой пример кода:

public class ContourDataGridDemo {
    public static void main(String[] args) {
        
        ContourDataGridProcessor processor = new ContourDataGridProcessor();
        
        Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);       
        
        //=======================================
        //Подготавливаем ваши данные о высоте, это двумерный массив Double. Представляет равномерно распределенные точки сетки, значения массива представляют высоту
        //Данные обычно поступают из конкретных приложений, использующих нерегулярные функции данных, таких как данные DEM о рельефе местности в определенной области
        //Следующий код создает некоторые фиктивные данные для демонстрации того, как их использовать
        
        Double[][] datas=new Double[100][100];
        
        for(int i=0;i<datas.length;i++) {
            for(int j=0;j<datas[0].length;j++) {
        
                datas[i][j]=-0.1*Math.pow(100d-i-j,2)+1000;
                
            }
        }

        //=======================================
        //Подготовьте ваши отображаемые данные values, это двумерный массив Double, представляющий равномерно распределенные точки сетки. Значения массива представляют собой не xyz, а четвертое измерение скалярных данных
        //Распределение строк и столбцов values может не совпадать с datas, но рекомендуется, чтобы они совпадали для оптимизации эффекта отображения
        //Следующий код создаёт некоторые фиктивные данные, чтобы продемонстрировать, как их использовать
        
        Double[][] values=new Double[50][50];
        for(int i=0;i<values.length;i++) {
            for(int j=0;j<values[0].length;j++) {
                double temp=Math.sqrt(Math.pow(i-25d,2)+Math.pow(j-25d,2));
                values[i][j]=temp;
            }
        }

        Color baseColor=Color.GRAY;//Облако требует основного цвета
        
        processor.addData(datas, values,baseColor, "my_name", new Range(0, 100), new Range(100, 200), 20, 20, 1f);
        
        processor.setClose3DObject(true);//Устанавливаем, является ли это замкнутым трехмерным объектом

        mgr.setCoordianteSysShowType(Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);
        
        mgr.setScaleX(5);
        mgr.setScaleY(5);
        mgr.setScaleZ(0.2);

        mgr.setTitle("Простой пример облачной поверхности");
        
        mgr.show();
    }
}

Столбчатая диаграмма

Рисунок 4. Столбчатая диаграмма

Простой пример кода:

public class BarsDemo {
``` **public static void main(String[] args)**

    BarProcessor processor = new BarProcessor();

    Matplot3D4JMgr mgr = new Matplot3D4JMgr(processor);

    // ===========================================
    // Здесь готовится данные
    Double[][] ds1 = { { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 },
        { 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }, { 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 } };

    Color c1 = Color.RED;
    Color c2 = Color.GREEN;
    Color c3 = new Color(80, 80, 255);

    Color[][] colors = { { c1, c1, c1, c1, c1, c1, c1, c1 }, { c2, c2, c2, c2, c2, c2, c2, c2 },
        { c3, c3, c3, c3, c3, c3, c3, c3 } };

    Color ce = Color.BLACK;

    Color[][] ecolors = { { ce, ce, ce, ce, ce, ce, ce, ce }, { ce, ce, ce, ce, ce, ce, ce, ce },
        { ce, ce, ce, ce, ce, ce, ce, ce } };

    processor.addData("Проект 1", ds1, colors, ecolors);


    processor.setBarWidthX(2);
    processor.setBarWidthY(2);

    processor.setxSpace(0.2);
    processor.setySpace(1);
    processor.setSpaceInGroup(0.3);

    // Пользовательский ярлык панели легенды
    KeyLabelLegend legend = new KeyLabelLegend();
    legend.put("Проект A", c1);
    legend.put("Проект B", c2);
    legend.put("Проект C", c3);

    mgr.addLegend(legend);

    mgr.setScaleZ(1.5);
    mgr.setScaleX(1.3);

    mgr.setTitle("Гистограмма");

    mgr.setElevation(0.2);
    mgr.setAzimuth(2.2);

    mgr.setOutlineAntiAliasing(false);// Можно отключить контур сглаживания

    mgr.show();
}

**Водопадная диаграмма**

Водопадная диаграмма — это тип диаграммы, который используется для отображения изменений в значениях данных с течением времени. Она похожа на гистограмму, но вместо того чтобы показывать значения в виде столбцов, она показывает их в виде вертикальных линий, которые начинаются и заканчиваются на разных уровнях.

Это простой пример кода:

public class SimpleWaterfallDemo { public static void main(String[] args) {

    Waterfall3DProcessor processer = new Waterfall3DProcessor();
    Matplot3D4JMgr mgr = new Matplot3D4JMgr(processer);

    int stepC = 300;
    double step = 0.05;

    processer.setGroupSpacing(1);// Установить интервал равным 1

    // Первая группа фигур
    List<Point2D.Double> li1 = new ArrayList<Point2D.Double>();

    for (int i = 0; i < stepC; i++) {
        li1.add(new Point2D.Double(i * step, Math.sin(i * step)));
    }

    processer.addData("Item 1", null, li1);

    // Вторая группа фигур
    List<Point2D.Double> li2 = new ArrayList<Point2D.Double>();

    for (int i = 0; i < stepC; i++) {
        li2.add(new Point2D.Double(i * step, Math.cos(i * step)));
    }

    processer.addData("Item 2", null, li2);

    processer.setBaseZ(-1); 

    mgr.setScaleZ(1.5);

    mgr.show();
}

}


**Точечная диаграмма рассеяния**

Точечная диаграмма рассеяния — это график, который отображает точки данных на плоскости. Точки могут представлять собой отдельные наблюдения или группы наблюдений. Диаграмма может использоваться для визуализации распределения данных, выявления тенденций и закономерностей, а также для сравнения групп данных.

Это простой пример кода:

public class DotsDemo {

public static void main(String[] args) throws Exception {

    ScatterDataProcessor processor = new ScatterDataProcessor();

    final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);     

    //*************************************************************//
    // Здесь готовятся данные, объекты Point3D помещаются в контейнер List<Point3D>
    // prepare your data here

    List<Point3D> dos1=new ArrayList<Point3D>();
    List<Point3D> dos2=new ArrayList<Point3D>();
    List<Point3D> dos3=new ArrayList<Point3D>();

    Random ram=new Random();

    for(int i=0;i<100;i++) {

        dos1.add(new Point3D(ram.nextDouble()+1,ram.nextDouble(),ram.nextDouble()+1));
        dos2.add(new Point3D(ram.nextDouble()+1,ram.nextDouble()+1,ram.nextDouble()));
        dos3.add(new Point3D(ram.nextDouble(),ram.nextDouble()+1,ram.nextDouble()));
    }

    // Добавить первую группу данных
    processor.addData("Item 1", dos1);

    // Добавить вторую группу данных
    processor.addData("Item 2", dos2);

    // Добавить третью группу данных
    processor.addData("Item 3", dos3);

    processer.setPropertyToAll("isShowEdge", true);

    mgr.setTitle("Диаграмма рассеяния точек");

    // Координатная плоскость не будет перекрывать данные
    mgr. setCoordianteSysShowType( Matplot3D4JMgr.COORDINATE_SYS_ALWAYS_FURTHER);

**}**


 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

Простые геометрические тела

Простые геометрические тела (изображение/простые геометрические тела.jpg «Простые геометрические тела»)

Простой пример кода

public class SimpleElementsDemo {
    public static void main(String[] args) throws Exception {
        
        Simple3DElementProcessor processor = new Simple3DElementProcessor();

        final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);     
        
        processor.addSphere(new Point3D(-1.5,1.5,0 ), 1,39,20, Color.YELLOW);
        
        processor.addCuboid(new Point3D(1.5,1.5,0 ), 1.3,1.5,1.7, Color.GREEN);

        processor.addCone(new Point3D(-1.5,-1.5,-0.9 ), new Point3D(-1.5,-1.5,1.0 ),1,30, Color.RED);
        
        processor.addCylinder(new Point3D(1.5,-1.5,-0.9 ), new Point3D(1.5,-1.5,1.0 ),1,30, Color.BLUE);

        mgr.setTitle("Простые геометрические тела");

        mgr.show();
    }
}
 


 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

Ломаные и кривые линии

Ломаные и кривые линии (изображение/ломаные и кривые линии.jpg «Ломаные и кривые линии»)

Пример простого кода

public class CurveDemo {

    public static void main(String[] args) throws Exception {
    
        CurveProcessor processor = new CurveProcessor();

        final Matplot3D4JMgr mgr=new Matplot3D4JMgr(processor);     
        
        List<Point3D> list=new ArrayList<Point3D>();
        
        list.add(new Point3D(0, 0, 0));
        list.add(new Point3D(0, 0, 1));
        list.add(new Point3D(1, 0, 1));
        list.add(new Point3D(1, 0.3, 0));
        list.add(new Point3D(1, 0.7, 0));
        list.add(new Point3D(1, 1, 1));
        list.add(new Point3D(0, 1, 1));
        list.add(new Point3D(0, 1, 0));
        
        processor.addData(list, "Ломаная A", Color.RED, 1);

        mgr.setTitle("Трёхмерная ломаная линия");
        
        mgr.setElevation(0.06);
        mgr.setAzimuth(0.36);

        mgr.show();
    }
}
 

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tanling8334-Matplot3D-for-Java.git
git@api.gitlife.ru:oschina-mirror/tanling8334-Matplot3D-for-Java.git
oschina-mirror
tanling8334-Matplot3D-for-Java
tanling8334-Matplot3D-for-Java
master