Skip to content
New issue

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

EXERCISE_15_21_Solution #71

Open
erenkrabulut opened this issue Jul 18, 2023 · 0 comments
Open

EXERCISE_15_21_Solution #71

erenkrabulut opened this issue Jul 18, 2023 · 0 comments

Comments

@erenkrabulut
Copy link

erenkrabulut commented Jul 18, 2023

  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))));
        }
        
        
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant