[index]

Let's do it on Jun4Java!

All examples run on MRJ 2.2.



New Look and Feel

about
about

quit
about

Sight Point
about

about
On Swing!


Bounding Balls

boundingBalls

example source.

    public static boolean Example1() {
        Jun3dPoint[] points = new Jun3dPoint[20];
        Random randomStream = new Random();
        for (int i = 0; i < points.length; i++) {
            Jun3dPoint point = new Jun3dPoint(randomStream.nextDouble(), randomStream.nextDouble(), randomStream.nextDouble());
            points[i] = point;
        }
        Jun3dBoundingBall boundingBall = Jun3dBoundingBall.FromPoints_(points);
        Vector aCollection = new Vector(points.length);
        for (int i = 0; i < points.length; i++) {
            JunOpenGL3dVertex aJunOpenGL3dVertex = JunOpenGL3dVertex.Point_(points[i]);
            aJunOpenGL3dVertex.size_(4);
            aJunOpenGL3dVertex.paint_(Color.black);
            aCollection.addElement(aJunOpenGL3dVertex);
        }
        JunOpenGL3dCompoundObject openGLObject = JunOpenGL3dCompoundObject.Components_(aCollection);
        JunOpenGL3dCompoundObject openGLBall = (JunOpenGL3dCompoundObject) JunOpenGL3dObject.Globe_radius_center_(15, boundingBall.radius(), boundingBall.center());
        openGLBall.paint_(Color.blue);
        JunOpenGLStipple stipple = JunOpenGLStipple.Halftone_(0.25);
        for (int each = 0; each < openGLBall.components().length; each++) {
            openGLBall.components()[each].stipple_(stipple);
        }
        openGLObject.add_(openGLBall);
        openGLObject.show();
        //return boundingBall
        return true;
    }

Metaballs

metaballs1

example source.

    public static boolean Example1() {
        try {
            JunMetaballSolid solid;
            JunMetaSphere ball1, ball2, ball3;
            Jun3dPoint aPoint;

            solid = new JunMetaballSolid();
            solid.threshold_(1.0d);
            aPoint = new Jun3dPoint(0.0 , 0.0,  0.0);
            ball1 = JunMetaSphere.Center_order_weight_(aPoint, 2, 0.4);
            aPoint = new Jun3dPoint(0.0 , 0.0 ,  1.0);
            ball2 = JunMetaSphere.Center_order_weight_(aPoint, 2, 0.4);
            aPoint = new Jun3dPoint(0.0 , 0.0 , -1.0);
            ball3 = JunMetaSphere.Center_order_weight_(aPoint, 2, 0.4);
            solid.add_(ball1);
            solid.add_(ball2);
            solid.add_(ball3);
            StInterval xInterval = new StInterval(-2, 2, 0.2);
            StInterval yInterval = new StInterval(-2, 2, 0.2);
            StInterval zInterval = new StInterval(-2, 2, 0.2);
            JunOpenGL3dObject aJunOpenGL3dObject = solid.asJunOpenGL3dObjectXInterval_yInterval_zInterval_(xInterval, yInterval, zInterval);
            aJunOpenGL3dObject.paint_(Color.white);
            aJunOpenGL3dObject.show();
            //return solid;
            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

metaballs2
left: JunMetaballSolid, right: JunOpenGL3dObject.

example source.

    public static boolean Example2() {
        try {
            JunMetaballSolid solid;
            JunMetaSphere cray, finger;
            Jun3dPoint aPoint;

            solid = JunMetaballSolid.Threshold_(1.0d);
            aPoint = new Jun3dPoint(0.0 , 0.0 ,  0.0);
            cray = JunMetaSphere.Center_order_weight_(aPoint, 2,  1.0);
            aPoint = new Jun3dPoint(1.0 , 0.0 ,  0.0);
            finger = JunMetaSphere.Center_order_weight_(aPoint, 8, -0.1);

            JunOpenGL3dObject smallJunOpenGL3dObject, largeJunOpenGL3dObject;
            largeJunOpenGL3dObject = JunOpenGL3dObject.Sphere_radius_(15, 1);
            largeJunOpenGL3dObject.paint_(Color.blue);
            aPoint = new Jun3dPoint(1.0 , 0.0 ,  0.0);
            smallJunOpenGL3dObject = JunOpenGL3dObject.Sphere_radius_center_(15, 0.1, aPoint);
            smallJunOpenGL3dObject.paint_(Color.red);
            JunOpenGL3dCompoundObject.With_with_(largeJunOpenGL3dObject, smallJunOpenGL3dObject).show();
            
            solid.add_(cray);
            solid.add_(finger);
            StInterval xInterval = StInterval.From_to_by_(-2, 2, 0.2);
            StInterval yInterval = StInterval.From_to_by_(-2, 2, 0.2);
            StInterval zInterval = StInterval.From_to_by_(-2, 2, 0.2);
            JunOpenGL3dObject aJunOpenGL3dObject = solid.asJunOpenGL3dObjectXInterval_yInterval_zInterval_(xInterval, yInterval, zInterval);
            aJunOpenGL3dObject.paint_(Color.blue);
            aJunOpenGL3dObject.show();
            //return solid;
            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

Voronoi

Voronoi Processor

Voronoi Trace 1 Voronoi Triangles 1
left: trace, right: triangles.

example source.

    public static boolean Example3() {
        Vector dots = new Vector();
        Random randomStream = new Random();
        for (int i = 0; i < 50; i++) {
            dots.addElement(new Jun2dPoint(randomStream.nextDouble(), randomStream.nextDouble()));
        }
        JunVoronoi2dProcessor voronoi = JunVoronoi2dProcessor.Dots_(dots);
        voronoi.trace_(true);
        Frame frame = new Frame("JunVoronoi2dProcessor Trace Display");
        frame.setSize(JunVoronoi2dProcessor.defaultDimension);
        frame.setResizable(false);
        frame.add(voronoi.canvas());
        frame.pack();
        frame.show();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                e.getWindow().dispose();
            }
        });
        voronoi.compute();
        System.out.println("area: " + voronoi.area());
        Graphics gc = null;
        StImage anImage = new StImage(300, 300);
        Image newImage = SystemResourceSupport.createImage(anImage.width(), anImage.height());
        try {
            Jun2dPoint[][] triangles = voronoi.triangles();
            gc = newImage.getGraphics();
            gc.setColor(Color.white);
            gc.fillRect(0, 0, newImage.getWidth(null), newImage.getHeight(null));
            Point scale = new Point(200, 200);
            Point translation = new Point(50, 50);
            Rectangle box = new Rectangle(new Point(0, 0), new Dimension(1, 1));
            box.x *= scale.x;
            box.y *= scale.y;
            box.width *= scale.x;
            box.height *= scale.y;
            box.x += translation.x;
            box.y += translation.y;
            gc.setColor(Color.red);
            gc.drawRect(box.x, box.y, box.width, box.height);
            for (int i = 0; i < triangles.length; i++) {
                Jun2dPoint[] points = triangles[i];
                int[] xPoints = new int[points.length + 1];
                int[] yPoints = new int[points.length + 1];
                for (int j = 0; j < points.length; j++) {
                    Jun2dPoint point = points[j];
                    if (point != null) {
                        xPoints[j] = (int) (point.x() * scale.x + translation.x);
                        yPoints[j] = (int) (point.y() * scale.y + translation.y);
                    }
                }
                xPoints[points.length] = xPoints[0];
                yPoints[points.length] = yPoints[0];
                gc.setColor(Color.black);
                gc.drawPolyline(xPoints, yPoints, xPoints.length);
            }
            (new StImage(newImage))._display();
        } finally {
            gc.dispose();
            newImage.flush();
        }
        //return voronoi;
        return true;
    }

Voronoi Trace 2 Voronoi Triangles 2

example source.

    public static boolean Example8() {
        //area: 3.1256671980047d
        System.out.println("This is a low precision example.");
        final Vector dots = new Vector();
        final int step = 10;
        dots.addElement(new Jun2dPoint(0.0d, 0.0d));
        StInterval interval = StInterval.From_to_by_(0, 360, step);
        interval.do_(new StBlockClosure() {
            public Object value_(Object valueObject) {
                double degrees = ((Double) valueObject).doubleValue();
                double x = Math.cos(JunAngle._DegreesToRadians(degrees));
                double y = Math.sin(JunAngle._DegreesToRadians(degrees));
                dots.addElement(new Jun2dPoint(x, y));
                x = Math.cos(JunAngle._DegreesToRadians(degrees + step / 2));
                y = Math.sin(JunAngle._DegreesToRadians(degrees + step / 2));
                dots.addElement(new Jun2dPoint(x * 0.5, y * 0.5));
                return null;
            };
        });
        JunVoronoi2dProcessor voronoi = JunVoronoi2dProcessor.Dots_(dots);
        voronoi.trace_(true);
        Frame frame = new Frame("JunVoronoi2dProcessor Trace Display");
        frame.setSize(JunVoronoi2dProcessor.defaultDimension);
        frame.setResizable(false);
        frame.add(voronoi.canvas());
        frame.pack();
        frame.show();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                e.getWindow().dispose();
            }
        });
        voronoi.compute();
        System.out.println("area: " + voronoi.area());
        Graphics gc = null;
        StImage anImage = new StImage(300, 300);
        Image newImage = SystemResourceSupport.createImage(anImage.width(), anImage.height());
        try {
            Jun2dPoint[][] triangles = voronoi.triangles();
            gc = newImage.getGraphics();
            gc.setColor(Color.white);
            gc.fillRect(0, 0, newImage.getWidth(null), newImage.getHeight(null));
            Point scale = new Point(100, 100);
            Point translation = new Point(150, 150);
            Point origin = new Point(-1, -1);
            Rectangle box = new Rectangle(origin, new Dimension(1 - origin.x, 1 - origin.y));
            box.x *= scale.x;
            box.y *= scale.y;
            box.width *= scale.x;
            box.height *= scale.y;
            box.x += translation.x;
            box.y += translation.y;
            gc.setColor(Color.red);
            gc.drawRect(box.x, box.y, box.width, box.height);
            for (int i = 0; i < triangles.length; i++) {
                Jun2dPoint[] points = triangles[i];
                int[] xPoints = new int[points.length + 1];
                int[] yPoints = new int[points.length + 1];
                for (int j = 0; j < points.length; j++) {
                    Jun2dPoint point = points[j];
                    if (point != null) {
                        xPoints[j] = (int) (point.x() * scale.x + translation.x);
                        yPoints[j] = (int) (point.y() * scale.y + translation.y);
                    }
                }
                xPoints[points.length] = xPoints[0];
                yPoints[points.length] = yPoints[0];
                gc.setColor(Color.black);
                gc.drawPolyline(xPoints, yPoints, xPoints.length);
            }
            (new StImage(newImage))._display();
        } finally {
            gc.dispose();
            newImage.flush();
        }
        //return voronoi;
        return true;
    }

Voronoi Diagram

Voronoi Diagram 1

example source.

    public static boolean Example1b() {
        final JunVoronoi2dDiagram diagram = new JunVoronoi2dDiagram(new Jun2dPoint(200, 200));
        diagram.displayCircle_(true);
        final Random random = new Random();
        Canvas canvas = new Canvas() {
            public void paint(Graphics g) {
                g.drawImage(diagram.asImage(), 0, 0, null);
                return;
            }
            public void displayOn_(Graphics g) {
                this.paint(g);
                return;
            }
        };
        canvas.setSize(diagram.extentByDimension());
        Frame frame = new Frame(diagram.labelString());
        frame.add(canvas);
        frame.pack();
        frame.show();
        frame.setResizable(false);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                e.getWindow().dispose();
            }
        });
        for (int i = 0; i < 50; i++) {
            diagram.add_(new Jun2dPoint(random.nextDouble(), random.nextDouble()).scaledBy_(diagram.extent()));
            diagram.displayOn_(canvas.getGraphics());
        }
        System.out.println("area: " + diagram.area());
        return true;
    }

Voronoi Diagram 2

example source.

    public static boolean Example6() {
        System.out.println("This is a low precision example.");
        final JunVoronoi2dDiagram diagram = new JunVoronoi2dDiagram(new Jun2dPoint(200, 200));
        final Vector dots = new Vector();
        final int step = 10;
        dots.addElement(new Jun2dPoint(0.0d, 0.0d));
        StInterval interval = StInterval.From_to_by_(0, 360, step);
        interval.do_(new StBlockClosure() {
            public Object value_(Object valueObject) {
                double degrees = ((Double) valueObject).doubleValue();
                double x = Math.cos(JunAngle._DegreesToRadians(degrees));
                double y = Math.sin(JunAngle._DegreesToRadians(degrees));
                dots.addElement(new Jun2dPoint(x, y));
                x = Math.cos(JunAngle._DegreesToRadians(degrees + step / 2));
                y = Math.sin(JunAngle._DegreesToRadians(degrees + step / 2));
                dots.addElement(new Jun2dPoint(x * 0.5, y * 0.5));
                return null;
            }
        });
        for (Enumeration e = dots.elements(); e.hasMoreElements(); ) {
            Jun2dPoint dot = (Jun2dPoint) e.nextElement();
            diagram.add_( dot.plus_(1).scaledBy_(diagram.extent().dividedBy_(2)) );
        }
        Frame window = JunDisplayModel.Visual_(diagram.asImage()).open();
        window.setTitle(diagram.labelString());
        window.setResizable(false);
        System.out.println("area: " + diagram.area());
        return true;
    }

Delaunay Diagram

Delaunay Diagram 1
left: DelaunayDiagram, right: diagram.asVoronoiDiagram().

example source.

    public static boolean Example2() {
        final JunDelaunay2dDiagram diagram = new JunDelaunay2dDiagram(new Jun2dPoint(200, 200));
        Random random = new Random();
        for (int i = 0; i < 50; i++) {
            diagram.add_(new Jun2dPoint(random.nextDouble(), random.nextDouble()).scaledBy_(diagram.extent()));
        }
        Canvas canvas = new Canvas() {
            public void paint(Graphics g) {
                g.drawImage(diagram.asImage(), 0, 0, null);
                return;
            }
            public void displayOn_(Graphics g) {
                this.paint(g);
                return;
            }
        };
        canvas.setSize(diagram.extentByDimension());
        Frame window1 = JunDisplayModel.Visual_(diagram.asImage()).open();
        window1.setTitle(diagram.labelString());
        window1.setResizable(false);
        Canvas canvas2 = new Canvas() {
            public void paint(Graphics g) {
                g.drawImage(diagram.asVoronoiDiagram().asImage(), 0, 0, null);
                return;
            }
            public void displayOn_(Graphics g) {
                this.paint(g);
                return;
            }
        };
        canvas2.setSize(diagram.extentByDimension());
        Frame window2 = JunDisplayModel.Visual_(diagram.asVoronoiDiagram().asImage()).open();
        window2.setTitle(diagram.asVoronoiDiagram().labelString());
        window2.setResizable(false);
        System.out.println("area: " + diagram.area());
        return true;
    }

Delaunay Diagram 2

example source.

    public static boolean Example5() {
        System.out.println("This is a low precision example.");
        final JunDelaunay2dDiagram diagram = new JunDelaunay2dDiagram(new Jun2dPoint(200, 200));
        final int roundTimes = 10;
        int count = 0;
        for (int i = 0; i <= roundTimes; i++) {
            for (int j = 0; j <= roundTimes; j++) {
                if (count % 2 == 0) {
                    diagram.add_((new Jun2dPoint((double) j / 10, (double) i / 10)).scaledBy_(diagram.extent()));
                }
                count++;
            }
        }
        Canvas canvas = new Canvas() {
            public void paint(Graphics g) {
                g.drawImage(diagram.asImage(), 0, 0, null);
                return;
            }
            public void displayOn_(Graphics g) {
                this.paint(g);
                return;
            }
        };
        canvas.setSize(diagram.extentByDimension());
        Frame window = JunDisplayModel.Visual_(diagram.asImage()).open();
        window.setTitle(diagram.labelString());
        window.setResizable(false);
        System.out.println("area: " + diagram.area());
        return true;
    }

Created: Feb, 2000.
[index]