找不到与JavaFx形状碰撞的透视变换

时间:2017-12-17 23:24:05

标签: java javafx javafx-8 perspective

我有一组矩形(或多边形),具有动态计算的透视变换(通过拖放来应用)。问题是这个变换后矩形的坐标不是最新的,我找不到与汽车中心的碰撞。 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);
        }
    });

子组合是矩形(或者我可以重构多边形)。 孩子在变换之前已经坐下,所以谓词不起作用。

Presentation of program work

P.S。如果有帮助,我可以提供任何代码

1 个答案:

答案 0 :(得分:0)

事实上,JavaFX中的PerspectiveTransform扩展了类Effect,与真正的转换没有任何相似之处(e.x.Rotate)。

主要区别在于类的jdoc:

  

    请注意,此效果不会调整输入事件的坐标     或任何衡量{@code Node}上的包含的方法。     鼠标拣选和遏制方法的结果是不确定的     当{@code Node}具有{@code PerspectiveTransform}效果时。

这意味着您的形状变化会以可视方式显示,但坐标不会更新。

其他解决方案:

  • 使用真正的3D,e.x。 - 与PerspectiveCamera达成相同的效果
  • 通过旋转和缩放等实际转换获得相同的效果