X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth-3d-demos.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fexamples%2FGraphDemo.java;h=f644c3a177118edaf64097275846465b7ad6cb4a;hp=68a1db132fc7d94079f4314840f048010f113c9e;hb=fd099c489d7f4df2624c07d1d3ba24f658b147a7;hpb=efd2a72758ee107b48cf4795e05ffb9219fd1d8b diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/examples/GraphDemo.java b/src/main/java/eu/svjatoslav/sixth/e3d/examples/GraphDemo.java old mode 100644 new mode 100755 index 68a1db1..f644c3a --- a/src/main/java/eu/svjatoslav/sixth/e3d/examples/GraphDemo.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/examples/GraphDemo.java @@ -1,25 +1,60 @@ /* - * Sixth 3D engine demos. Copyright ©2012-2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * Sixth 3D engine demos. Author: Svjatoslav Agejenko. + * This project is released under Creative Commons Zero (CC0) license. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 3 of the GNU Lesser General Public License - * or later as published by the Free Software Foundation. - */ +*/ package eu.svjatoslav.sixth.e3d.examples; import eu.svjatoslav.sixth.e3d.geometry.Point2D; import eu.svjatoslav.sixth.e3d.geometry.Point3D; import eu.svjatoslav.sixth.e3d.gui.ViewFrame; +import eu.svjatoslav.sixth.e3d.renderer.raster.Color; import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection; +import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.line.LineAppearance; +import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.solidpolygon.SolidPolygon; import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.Graph; +import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.WireframeSphere; -import java.io.IOException; import java.util.ArrayList; import java.util.List; public class GraphDemo { + private static final double WAVE_FREQUENCY = 50d; + private static final double WAVE_AMPLITUDE = 50d; + private static final Color SQUARE_PLATE_COLOR = new Color("88F7"); + + private static void makeSquarePlate(final ShapeCollection shapeCollection, + final double y, final double x, final double z) { + final Point3D p1 = new Point3D(x, y, z); + final Point3D p2 = new Point3D(x + 20, y, z); + final Point3D p3 = new Point3D(x, y, z + 20); + final Point3D p4 = new Point3D(x + 20, y, z + 20); + final SolidPolygon polygon1 = new SolidPolygon(p1, p2, p3, SQUARE_PLATE_COLOR); + final SolidPolygon polygon2 = new SolidPolygon(p4, p2, p3, SQUARE_PLATE_COLOR); + shapeCollection.addShape(polygon1); + shapeCollection.addShape(polygon2); + } + + /** + * @param surfaceElevation surface total elevation + */ + private static void addWobblySurface(final ShapeCollection shapeCollection, + final double surfaceElevation) { + for (double x = -500; x < 500; x += 20) + for (double z = -500; z < 500; z += 20) { + + // use Pythagorean theorem to compute distance from the center + final double distanceFromCenter = Math.sqrt((x * x) + (z * z)); + + double plateElevation = Math.sin(distanceFromCenter / WAVE_FREQUENCY) * WAVE_AMPLITUDE; + + makeSquarePlate(shapeCollection, plateElevation + surfaceElevation, x, + z); + } + } + private static final double scale = 50d; private static Graph getCosineGraph(final Point3D location) { @@ -99,33 +134,54 @@ public class GraphDemo { return new Graph(scale, data, "Tangent", location); } - public static void main(final String[] args) throws IOException { + public static void main(final String[] args) { final ViewFrame viewFrame = new ViewFrame(); - final ShapeCollection geometryCollection = viewFrame.getViewPanel() .getRootShapeCollection(); - Point3D location = new Point3D(-600, -300, 0); + addMathFormulas(geometryCollection); + addSphere(geometryCollection); + addWobblySurface(geometryCollection, 200); + addWobblySurface(geometryCollection, -200); + + setAvatarLocation(viewFrame); + } + + private static void addSphere(ShapeCollection geometryCollection) { + // add sphere + geometryCollection.addShape(new WireframeSphere(new Point3D(0, 0, 0), + 100, + new LineAppearance( + 4, + new Color(255,0, 0, 30)) + )); + } + + private static void addMathFormulas(ShapeCollection geometryCollection) { + int z = 1000; + Point3D location = new Point3D(-600, -300, z); geometryCollection.addShape(getSineGraph(location)); - location = new Point3D(600, -300, 0); + location = new Point3D(600, -300, z); geometryCollection.addShape(getFormula1Graph(location)); - location = new Point3D(-600, 0, 0); + location = new Point3D(-600, 0, z); geometryCollection.addShape(getCosineGraph(location)); - location = new Point3D(600, 0, 0); + location = new Point3D(600, 0, z); geometryCollection.addShape(getFormula2Graph(location)); - location = new Point3D(-600, 300, 0); + location = new Point3D(-600, 300, z); geometryCollection.addShape(getTangentGraph(location)); - location = new Point3D(600, 300, 0); + location = new Point3D(600, 300, z); geometryCollection.addShape(getFormula3Graph(location)); + } + private static void setAvatarLocation(ViewFrame viewFrame) { viewFrame.getViewPanel().getAvatar() .setLocation(new Point3D(0, 0, -500)); - } + }