Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. package geometry;
  2.  
  3. import javafx.scene.shape.Polygon;
  4. import javafx.scene.shape.Shape;
  5.  
  6. public class Quadrangle extends GeometricObject {
  7.  
  8. private Point[] points=new Point[4];
  9. private double[] sides=new double[4];
  10.  
  11. public Quadrangle() {
  12. super("Quadrangle", 4, 4);
  13. points[0]=new Point(0,0);
  14. points[1]=new Point(1,0);
  15. points[2]=new Point(1,1);
  16. points[3]=new Point(0,1);
  17. calculateSides();
  18.  
  19. }
  20.  
  21. public Quadrangle(Point point1, Point point2, Point point3, Point point4) {
  22. super("Quadrangle", 4, 4);
  23. points[0]=new Point(point1);
  24. points[1]=new Point(point2);
  25. points[2]=new Point(point3);
  26. points[3]=new Point(point4);
  27. calculateSides();
  28.  
  29. }
  30.  
  31. public Quadrangle(Point[] points) {
  32. super("Quadrangle", 4, 4);
  33. for (int index=0; index<points.length; index++) {
  34. this.points[index]=points[index];
  35. }
  36. calculateSides();
  37.  
  38. }
  39.  
  40. public Quadrangle(Quadrangle otherQuadrangle) {
  41. super("Quadrangle", 4, 4);
  42. for (int index=0; index<points.length; index++) {
  43. points[index]=new Point(otherQuadrangle.points[index]);
  44. sides[index]=otherQuadrangle.sides[index];
  45. }
  46. }
  47.  
  48. private void calculateSides() {
  49.  
  50. sides[0]=Help.calculateDistance(points[0], points[1]);
  51. sides[1]=Help.calculateDistance(points[1], points[2]);
  52. sides[2]=Help.calculateDistance(points[2], points[3]);
  53. sides[3]=Help.calculateDistance(points[3], points[0]);
  54. }
  55. @Override
  56. public boolean isValid() {
  57.  
  58. double quadrangleArea=calculateArea();
  59. Triangle[] triangles=new Triangle[4];
  60. triangles[0]=new Triangle(points[0], points[1], points[2]);
  61. triangles[1]=new Triangle(points[1], points[2], points[3]);
  62. triangles[2]=new Triangle(points[2], points[3], points[0]);
  63. triangles[3]=new Triangle(points[3], points[0], points[1]);
  64. for (Triangle triangle:triangles) {
  65. boolean triangleNotValid=!triangle.isValid();
  66. boolean triangleAreaBigger=triangle.calculateArea()>quadrangleArea;
  67. if(triangleNotValid||triangleAreaBigger) {
  68. return false;
  69. }
  70. }
  71. return true;
  72. }
  73. @Override
  74. public void initialize() {
  75. do {
  76. for (Point point : points) {
  77. point.initialize();
  78.  
  79. }
  80. } while (!isValid());
  81. calculateSides();
  82. }
  83. @Override
  84. public double calculatePerimeter() {
  85.  
  86. return sides[0] + sides[1] + sides[2] + sides[3];
  87. }
  88. @Override
  89. public double calculateArea() {
  90.  
  91. double result1=points[0].x*points[1].y-points[0].y*points[1].x;
  92. double result2=points[1].x*points[2].y-points[1].y*points[2].x;
  93. double result3=points[2].x*points[3].y-points[2].y*points[3].x;
  94. double result4=points[3].x*points[0].y-points[3].y*points[0].x;
  95. return Math.abs(result1+result2+result3+result4)/2;
  96. }
  97. @Override
  98. public String getType() {
  99.  
  100. double coefficient1=Help.calculateLineCoefficient(points[0], points[1]);
  101. double coefficient2=Help.calculateLineCoefficient(points[1], points[2]);
  102. double coefficient3=Help.calculateLineCoefficient(points[2], points[3]);
  103. double coefficient4=Help.calculateLineCoefficient(points[3], points[0]);
  104. if(Help.equal(coefficient1, coefficient3) && Help.equal(coefficient2, coefficient4)) {
  105. return "Parallelogramm";
  106. } else if (Help.equal(coefficient1, coefficient3) || Help.equal(coefficient2, coefficient4)) {
  107. return "Trapez";
  108. } else {
  109. return "gewoehnliches Viereck";
  110. }
  111. }
  112. @Override
  113. public String toString() {
  114.  
  115. return points[0]+"-"+points[1]+"-"+points[2]+"-"+points[3];
  116. }
  117.  
  118. public void print() {
  119. System.out.format("%s, %s, U=%s, F=%s\n", this, getType(), calculatePerimeter(), calculateArea());
  120.  
  121. }
  122. @Override
  123. public boolean equal(GeometricObject otherGeometricObject) {
  124. if (otherGeometricObject instanceof Quadrangle) {
  125. Quadrangle otherQuadrangle=(Quadrangle) otherGeometricObject;
  126. Triangle triangle1=new Triangle(points[0], points[1], points[2]);
  127. Triangle triangle2=new Triangle(points[0], points[2], points[3]);
  128. Point[] otherPoints= otherQuadrangle.points;
  129. Triangle otherTriangle1=new Triangle(otherPoints[0], otherPoints[1], otherPoints[2]);
  130. Triangle otherTriangle2=new Triangle(otherPoints[0], otherPoints[2], otherPoints[3]);
  131. return triangle1.equal(otherTriangle1) && triangle2.equal(otherTriangle2);
  132.  
  133. } else {
  134. return false;
  135. }
  136.  
  137. }
  138.  
  139. @Override
  140. public Shape createShape(int scale) {
  141. double[] coordinates= {
  142. points[0].x, points[0].y,
  143. points[1].x, points[1].y,
  144. points[2].x, points[2].y,
  145. points[3].x, points[3].y
  146. };
  147. for (int index=0; index<coordinates.length; index++) {
  148. coordinates[index]*=scale;
  149. }
  150. return new Polygon(coordinates);
  151. }
  152.  
  153. @Override
  154. public boolean contains(double x, double y) {
  155. Point clickPoint = new Point(x, y);
  156. Triangle triangle1 = new Triangle(points[0], points[1], clickPoint);
  157. Triangle triangle2 = new Triangle(points[1], points[2], clickPoint);
  158. Triangle triangle3 = new Triangle(points[2], points[3], clickPoint);
  159. Triangle triangle4 = new Triangle(points[3], points[0], clickPoint);
  160. double areaSum = triangle1.calculateArea() + triangle2.calculateArea() + triangle3.calculateArea()
  161. + triangle4.calculateArea();
  162. if (areaSum == calculateArea()) {
  163. return true;
  164. } else {
  165. return false;
  166. }
  167. }
  168.  
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement