Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. public class Main extends Application {
  2.  
  3.  
  4.  
  5.  
  6. private double[] makeLineEquation(Point2D a1, Point2D a2){
  7. double A = a1.getY() - a2.getY();
  8. double B = a2.getX() - a1.getX();
  9. double C = a1.getX() * a2.getY() - a2.getX() * a1.getY();
  10.  
  11. System.out.println(A + "x + " + B + "y + " + C + " = 0");
  12. return new double[] {A, B, C};
  13. }
  14.  
  15. private boolean isLineCrossesEllipse(Point2D a1, Point2D a2, Ellipse ellipse){
  16. //(x1-x0)^2/a^2 + (y1-y0)^2/b^2 < 1
  17. // (x2-x0)^2/a^2 + (y2-y0)^2/b^2 > 1
  18. double x1 = Math.pow(a1.getX() - ellipse.getCenterX(),2) / Math.pow(ellipse.getRadiusX(),2);
  19. double y1 = Math.pow(a1.getY() - ellipse.getCenterY(),2) / Math.pow(ellipse.getRadiusY(),2);
  20.  
  21. double x2 = Math.pow(a2.getX() - ellipse.getCenterX(),2) / Math.pow(ellipse.getRadiusX(),2);
  22. double y2 = Math.pow(a2.getY() - ellipse.getCenterY(),2) / Math.pow(ellipse.getRadiusY(),2);
  23.  
  24. //(x1-x0)^2/a^2 + (y1-y0)^2/b^2 > 1
  25. // (x2-x0)^2/a^2 + (y2-y0)^2/b^2 < 1
  26.  
  27. if(x1 + y1 <1 && x2 + y2 >1 || x1 + y1 >1 && x2 + y2 <1)
  28. return true;
  29.  
  30. return false;
  31. }
  32. private Point2D pointBelongsSegment(Point2D interP1, Point2D interP2, Point2D segP1,
  33. Point2D segP2){
  34. //if((interP1.getX() - segP1.getX()) * (segP2.getY() - segP1.getY()) -
  35. // (interP1.getY() - segP1.getY()) * (segP2.getX() - segP1.getX())==0 ){
  36. if(interP1.getX() > segP1.getX() && interP1.getX() < segP2.getX() ||
  37. interP1.getX() > segP2.getX() && interP1.getX() < segP1.getX() )
  38. return interP1;
  39. else return interP2;
  40.  
  41. }
  42.  
  43. public Point2D interactionPoints(Point2D a1, Point2D a2, Ellipse ellipse){
  44.  
  45. double [] coefs = makeLineEquation(a1, a2);
  46. double A = coefs[0];
  47. double B = coefs [1];
  48. double C = coefs[2];
  49.  
  50. double A1;
  51. double B1;
  52. double C1;
  53.  
  54. double D;
  55. double y1;
  56. double y2;
  57. double x1;
  58. double x2;
  59.  
  60. double a = ellipse.getRadiusX();
  61. double b = ellipse.getRadiusY();
  62. double x0 = ellipse.getCenterX();
  63. double y0 = ellipse.getCenterY();
  64. System.out.println("A = " + A + " B = " + B + " C = " + C);
  65.  
  66.  
  67. if (isLineCrossesEllipse(a1,a2, ellipse)) {
  68. if (A == 0) {
  69.  
  70. A1 = b*b;
  71. B1 = - 2*x0*b*b;
  72. C1 = b*b*x0*x0 + a*a*C*C / (B*B) + 2*y0*a*a*C/B + a*a*y0*y0 - a*a*b*b;
  73.  
  74. D = Math.sqrt(Math.pow(B1, 2) - 4 * A1 * C1);
  75. x1 = (- B1 + D)/ (2 * A1);
  76. x2 = (- B1 - D)/ (2 * A1);
  77. y1 = - C/B;
  78. y2 = y1;
  79.  
  80. System.out.println("IF x1 y1 = " + x1 + " " + y1 + " x2 y2 = " + x2 + " " + y2);
  81. }
  82. else {
  83.  
  84. A1 = Math.pow((b * B) / A, 2) + Math.pow(a, 2);
  85.  
  86. B1 = (Math.pow(b, 2) * 2 * B * C) / Math.pow(A, 2) + (Math.pow(b, 2) * 2 * B * x0) / A -
  87. Math.pow(a, 2) * 2 * y0;
  88.  
  89. C1 = Math.pow(a * y0, 2) - Math.pow(a * b, 2) + Math.pow(b * x0, 2) +
  90. (2 * x0 * C * Math.pow(b, 2)) / A + Math.pow((b * C) / A, 2);
  91.  
  92.  
  93. D = Math.sqrt(Math.pow(B1, 2) - 4 * A1 * C1);
  94. y1 = (-B1 + D) / (2 * A1);
  95. y2 = (-B1 - D) / (2 * A1);
  96. x1 = (-C - B * y1) / A;
  97. x2 = (-C - B * y2) / A;
  98. System.out.println("x1 y1 = " + x1 + " " + y1 + " x2 y2 = " + x2 + " " + y2);
  99.  
  100. }
  101. Point2D interactionP = pointBelongsSegment(new Point2D(x1,y1),
  102. new Point2D(x2,y2),a1,a2);
  103. System.out.println("interaction point is x: " + interactionP.getX()
  104. + " y: " + interactionP.getY());
  105. return interactionP;
  106. }
  107. else {
  108.  
  109.  
  110. System.out.println("Any interections or 2 interection");
  111.  
  112.  
  113. }
  114.  
  115. return new Point2D(0,0);
  116.  
  117.  
  118.  
  119. }
  120.  
  121.  
  122.  
  123. @Override
  124. public void start(Stage stage) throws Exception {
  125. HBox hbox = new HBox();
  126. stage.setScene(new Scene(hbox));
  127. stage.sizeToScene();
  128. stage.show();
  129.  
  130. Ellipse ellipse = new Ellipse();
  131. ellipse.setCenterX(3);
  132. ellipse.setCenterY(0);
  133. ellipse.setRadiusX(3);
  134. ellipse.setRadiusY(2);
  135.  
  136. Point2D a1 = new Point2D(-2,1); //center of first ellipse
  137. Point2D a2 = new Point2D(3,1); //center of second ellipse
  138.  
  139. interactionPoints(a1, a2, ellipse);
  140.  
  141. }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement