我目前正在研究JavaFX與不同形狀之間的邊界相交。 我想檢測兩個多邊形在其點上的碰撞,而不是它們的邊界(即2個多邊形)。JavaFX十字形狀與多邊形
請參閱圖1:不需要的行爲,圖2:所需的行爲。
是否有任何現有的算法來幫助我或任何圖書館使用? 感謝提前:)
在這裏找到我的解決辦法:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Shape;
import javafx.stage.Stage;
public class Tester extends Application {
@Override
public void start(Stage stage) throws Exception {
Pane root = new Pane();
root.setStyle("-fx-background-color:cyan;");
Polygon p1 = new Polygon();
p1.getPoints().addAll(new Double[]{
50.,50.,
50.,100.,
60.,100.,
60.,80.,
80.,70.,
80.,100.,
100.,100.,
100.,50.
});
p1.setFill(Color.GREEN);
Polygon p2 = new Polygon();
p2.getPoints().addAll(new Double[]{
65.,100.,
65.,90.,
75.,80.,
100.,100.
});
p2.setFill(Color.RED);
root.getChildren().addAll(p1,p2);
stage.setScene(new Scene(root));
stage.show();
Shape inter = Shape.intersect(p1, p2);
root.getChildren().add(inter);
System.out.println(inter.getLayoutBounds().getWidth() + ":" + inter.getLayoutBounds().getHeight());
if(inter.getLayoutBounds().getHeight()<=0 || inter.getLayoutBounds().getWidth()<=0) {
System.out.println("No intersection");
}
else {
System.out.println("intersection detected");
}
}
public static void main(String[] args) {
launch(args);
}
}
輸出:
20.0:16.0 intersection detected
它似乎正常工作,我將用Path對象進行測試以替換Polygon對象。
你可能要檢查,如果你的一個多邊形的邊的交點是在其他的邊界。使用:'mypolygon1.getBoundsInLocal()。contains(myPolygon2.getBoundsInLocal())' – Aspirant
[檢查形狀與JavaFX的碰撞]的可能的重複(http://stackoverflow.com/questions/15013913/checking-collision-of-shapes -with-javafx) – jewelsea
@user我測試過,但它是圖1的情況。 – PacDroid