У меня есть массив, состоящий из 50 кругов, и я могу заставить их отображаться при запуске приложения. Я чувствую, что либо у меня неверная логика, когда я пытаюсь определить расстояние между кругами, либо я неправильно устанавливаю цвет после проведения сравнения.
Это мой ГЛАВНЫЙ кружок. Одно из требований к назначению состояло в том, чтобы кружок был отдельным отдельным классом.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package CircleJavier;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import java.util.Random;
import javafx.scene.paint.Paint;
import javafx.scene.transform.Scale;
import javafx.scene.shape.*;
/**
*
* @author javyc
*/
public class Circ extends Group {
Random rand = new Random();
int x = rand.nextInt(300);
int y = rand.nextInt(300);
int rad = rand.nextInt(35);
Paint fill = Color.RED;
public Circ()
{
Circle cockpit = new Circle();
cockpit.setCenterX(x);
cockpit.setCenterY(y);
cockpit.setRadius(rad);
cockpit.setFill(fill);
boolean addAll;
addAll = getChildren().addAll(cockpit);
}
}
Это мой основной код приложения, который, как мне кажется, таит в себе проблему во втором цикле for?
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package CircleJavier;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import java.util.Random;
import javafx.scene.paint.Paint;
import javafx.scene.transform.Scale;
import javafx.scene.shape.*;
/**
*
* @author javyc
*/
public class CircleJavier extends Application {
@Override
public void start(Stage primaryStage) {
// Circ circ1 = new Circ();
// Circ circ2 = new Circ();
// Circ circ3 = new Circ();
// Circ circ4 = new Circ();
// Circ circ5 = new Circ();
Circ[] circleArray = new Circ[50];
for (int i = 0 ; i < circleArray.length; i++){
Circ circle = new Circ();
circleArray[i] = circle;
boolean overlaps = false;
for (int j = 0; j<i; j++){
double center = circleArray[j].x;
double dx = center - circle.x;
double y = circleArray[j].y;
double dy = y - circle.y;
double radius = circleArray[j].rad;
double dist = Math.sqrt((dx * dx)+(dy *dy));
if (dist <= (circle.rad + radius)) {
circleArray[i].fill = Color.AQUAMARINE;
overlaps = true;
circleArray[j].fill = Color.CADETBLUE;
}
}
if (!overlaps){
circleArray[i].fill = Color.BLACK;
}
}
Group root = new Group();
root.getChildren().addAll(circleArray);
Scene Scene = new Scene(root, 500,350, Color.WHITE);
primaryStage.setTitle("Elephant Javier!");
primaryStage.setScene(Scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}