- Notifications
You must be signed in to change notification settings - Fork870
Open
Description
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
Labels
No labels