我有一组矩形(或多边形)与动态计算的透视变换(通过拖拽'应用)。问题是这个变换后矩形的坐标不是最新的,我找不到与汽车中心的碰撞。 zones
正如你在图像上看到的那样,错误的区域是绿色的,因为在imageVeiw左上角的拖拽矩形之前。
我在这里试图找到碰撞:
rectGrpoup.getChildren().forEach(child -> {
final Predicate<Car> carInZone = car -> {
final Bounds boundsInLocal = mainController.getImageView().getBoundsInLocal();
//different image size when detect and display
Point fixedScalePoint = scaleService.fixScale(new Point(car.getLastCenter()), screenSize, new ScreenSize(boundsInLocal.getHeight(), boundsInLocal.getWidth()));
//I need help in next line
return Shape.intersect((Rectangle) child, new Rectangle(fixedScalePoint.getX(), fixedScalePoint.getY(), 10, 10)).getBoundsInLocal().getWidth() != -1;
};
if (cars.stream().anyMatch(carInZone)) {
child.setFill(Color.GREEN);
} else {
child.setFill(Color.RED);
}
});
从子组中子项是矩形(或者我可以重构多边形)。 Child在变换之前具有坐标,因此谓词不起作用。
附:如果有帮助,我可以提供任何代码
事实上,JavaFX中的PerspectiveTransform扩展了类效果,与实际转换没有任何相似之处(e.x.Rotate)。
主要区别在于类的jdoc:
请注意,此效果不会调整输入事件的坐标或测量{@code Node}上的包含的任何方法。当{@code Node}具有{@code PerspectiveTransform}效果时,鼠标选取和包含方法的结果是不确定的。
这意味着可以直观地显示形状的变化,但不会更新坐标。
其他方案: