We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
package exc_15_21; import java.util.ArrayList; import javafx.application.Application; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Polygon; import javafx.scene.text.Text; import javafx.stage.Stage; public class Exc_15_21 extends Application { Pane pane = new Pane(); Circle circle = new Circle(200,200,100); Circle outerCircle = new Circle(200,200,112); Circle innerCircle = new Circle(200,200,88); @Override public void start(Stage primaryStage){ circle.setFill(Color.WHITE); circle.setStroke(Color.BLACK); pane.getChildren().add(circle); double angle1 = Math.toRadians(Math.random()*360); double x1 = circle.getCenterX() + (circle.getRadius()*Math.cos(angle1)); double y1 = circle.getCenterY() - (circle.getRadius()*Math.sin(angle1)); double angle2 = Math.toRadians(Math.random()*360); double x2 = circle.getCenterX() + (circle.getRadius()*Math.cos(angle2)); double y2 = circle.getCenterY() - (circle.getRadius()*Math.sin(angle2)); double angle3 = Math.toRadians(Math.random()*360); double x3 = circle.getCenterX() + (circle.getRadius()*Math.cos(angle3)); double y3 = circle.getCenterY() - (circle.getRadius()*Math.sin(angle3)); ArrayList<Circle> circles = new ArrayList<>(); Circle c1 = new Circle(x1,y1,12); Circle c2 = new Circle(x2,y2,12); Circle c3 = new Circle(x3,y3,12); circles.add(c1); circles.add(c2); circles.add(c3); display(circles); pane.setOnMouseDragged(e -> { for(int i=0 ; i< circles.size(); i++) { if(circles.get(i).contains(e.getX(),e.getY())) { if( outerCircle.contains(e.getX(),e.getY()) && !innerCircle.contains(e.getX(),e.getY()) ) { double[] pointsOnCircle = getPoints(e.getX(),e.getY()); circles.get(i).setCenterX(pointsOnCircle[0]); circles.get(i).setCenterY(pointsOnCircle[1]); display(circles); } } } }); primaryStage.setScene(new Scene(pane,400,400)); primaryStage.setTitle("Exc_15_21"); primaryStage.show(); } public double[] getPoints( double x, double y) { double angle = (Math.atan((y-circle.getCenterY())/(x-circle.getCenterX()))); angle *= -1; if(circle.getCenterX()>x) { angle +=Math.PI; } return new double[]{circle.getCenterX() + (circle.getRadius() * Math.cos(angle)) , circle.getCenterY() - (circle.getRadius() * Math.sin(angle))}; } public ArrayList<Double> getSides(ArrayList<Circle> p) { ArrayList<Double> sides = new ArrayList<>(); sides.add(Math.sqrt(Math.pow(p.get(0).getCenterX() - p.get(1).getCenterX(), 2) + Math.pow(p.get(0).getCenterY() - p.get(1).getCenterY(), 2))); sides.add(Math.sqrt(Math.pow(p.get(1).getCenterX() - p.get(2).getCenterX(), 2) + Math.pow(p.get(1).getCenterY() - p.get(2).getCenterY(), 2))); sides.add(Math.sqrt(Math.pow(p.get(2).getCenterX() - p.get(0).getCenterX(), 2) + Math.pow(p.get(2).getCenterY() - p.get(0).getCenterY(), 2))); return sides; } public ArrayList<Double> getAngles(ArrayList<Double> sides) { ArrayList<Double> angles = new ArrayList<>(); angles.add(Math.toDegrees(Math.acos((sides.get(0) * sides.get(0) - sides.get(1) * sides.get(1) - sides.get(2) * sides.get(2)) / (-2 * sides.get(1) * sides.get(2))))); angles.add(Math.toDegrees(Math.acos((sides.get(1) * sides.get(1) - sides.get(0) * sides.get(0) - sides.get(2) * sides.get(2)) / (-2 * sides.get(0) * sides.get(2))))); angles.add(Math.toDegrees(Math.acos((sides.get(2) * sides.get(2) - sides.get(1) * sides.get(1) - sides.get(0) * sides.get(0)) / (-2 * sides.get(0) * sides.get(1))))); return angles; } public void display(ArrayList<Circle> circles) { pane.getChildren().clear(); pane.getChildren().add(circle); Polygon triangle = new Polygon(); ObservableList<Double> points = triangle.getPoints(); for(int i=0 ; i<circles.size(); i++) { points.add(circles.get(i).getCenterX()); points.add(circles.get(i).getCenterY()); } triangle.setStroke(Color.BLACK); triangle.setFill(Color.WHITE); pane.getChildren().add(triangle); ArrayList<Double> angles = getAngles(getSides(circles)); for(int i=0 ; i<circles.size(); i++) { pane.getChildren().add(circles.get(i)); pane.getChildren().add(new Text( circles.get(i).getCenterX()+5 , circles.get(i).getCenterY()-18 , String.format("%.2f", angles.get(i)))); } } }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
The text was updated successfully, but these errors were encountered: