Skip to content

EXERCISE_15_21_Solution #71

Description

@erenkrabulut
packageexc_15_21;importjava.util.ArrayList;importjavafx.application.Application;importjavafx.collections.ObservableList;importjavafx.scene.Scene;importjavafx.scene.layout.Pane;importjavafx.scene.paint.Color;importjavafx.scene.shape.Circle;importjavafx.scene.shape.Polygon;importjavafx.scene.text.Text;importjavafx.stage.Stage;publicclassExc_15_21extendsApplication{Panepane=newPane();Circlecircle=newCircle(200,200,100);CircleouterCircle=newCircle(200,200,112);CircleinnerCircle=newCircle(200,200,88);@Overridepublicvoidstart(StageprimaryStage){circle.setFill(Color.WHITE);circle.setStroke(Color.BLACK);pane.getChildren().add(circle);doubleangle1=Math.toRadians(Math.random()*360);doublex1=circle.getCenterX() + (circle.getRadius()*Math.cos(angle1));doubley1=circle.getCenterY() - (circle.getRadius()*Math.sin(angle1));doubleangle2=Math.toRadians(Math.random()*360);doublex2=circle.getCenterX() + (circle.getRadius()*Math.cos(angle2));doubley2=circle.getCenterY() - (circle.getRadius()*Math.sin(angle2));doubleangle3=Math.toRadians(Math.random()*360);doublex3=circle.getCenterX() + (circle.getRadius()*Math.cos(angle3));doubley3=circle.getCenterY() - (circle.getRadius()*Math.sin(angle3));ArrayList<Circle> circles=newArrayList<>();Circlec1=newCircle(x1,y1,12);Circlec2=newCircle(x2,y2,12);Circlec3=newCircle(x3,y3,12);circles.add(c1);circles.add(c2);circles.add(c3);display(circles);pane.setOnMouseDragged(e->{for(inti=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(newScene(pane,400,400));primaryStage.setTitle("Exc_15_21");primaryStage.show();}publicdouble[]getPoints(doublex,doubley){doubleangle=(Math.atan((y-circle.getCenterY())/(x-circle.getCenterX())));angle *= -1;if(circle.getCenterX()>x){angle +=Math.PI;}returnnewdouble[]{circle.getCenterX() + (circle.getRadius() * Math.cos(angle)),circle.getCenterY() - (circle.getRadius() * Math.sin(angle))};}publicArrayList<Double> getSides(ArrayList<Circle> p){ArrayList<Double> sides=newArrayList<>();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)));returnsides;}publicArrayList<Double> getAngles(ArrayList<Double> sides){ArrayList<Double> angles=newArrayList<>();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)))));returnangles;}publicvoiddisplay(ArrayList<Circle> circles){pane.getChildren().clear();pane.getChildren().add(circle);Polygontriangle=newPolygon();ObservableList<Double> points=triangle.getPoints();for(inti=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(inti=0;i<circles.size();i++){pane.getChildren().add(circles.get(i));pane.getChildren().add(newText(circles.get(i).getCenterX()+5,circles.get(i).getCenterY()-18,String.format("%.2f",angles.get(i))));}}}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions