我在javafx中用鼠标拖动事件操作弧形时遇到了一个问题
我有一个用以下参数定义的Arc:
所以我需要的是在拖动的时候让弧线的起始角度“跟随”鼠标的移动:
当用户按下Arc的起点(位于起点角上)并在拖动鼠标时,我需要计算水平轴和从中心到鼠标位置的线形成的新起始角度
基本上,问题是计算给定点(鼠标位置)和其他给定参数(中心、长轴和短轴)的弧线的起始角度
我实际上是在用Math.atan2函数计算角度
newStartAngle = atan2(xMouse,yMouse)(假设中心x,y在0,0处)
但它仅在圆弧为圆形时有效(radiusX = radiusY)
另一种说法是:我需要弧线的起点始终在从中心到鼠标位置的线上(所以我需要不断更新起始角度,以使其跟随鼠标旋转运动)。(我希望我已经说得有点清楚了)
以下是样本的完整来源
import javafx.stage.Stage;
...
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
Group designer = createDesigner();
designer.setLayoutX(100);
designer.setLayoutY(200);
pane.getChildren().add(designer);
Scene sc = new Scene(pane, 600, 600);
primaryStage.setScene(sc);
primaryStage.show();
}
public static final double RX = 100;
public static final double RY = 50;
public static final double S_ANGLE = 45;
public static final double ARC_LENGTH = 90;
private Arc arc;
private Circle handle;
private Line connection;
double xMouse,yMouse;
public Group createDesigner() {
arc = new Arc();
arc.setRadiusX(RX);
arc.setRadiusY(RY);
arc.setStartAngle(S_ANGLE);
arc.setLength(ARC_LENGTH);
arc.setFill(Color.LIGHTBLUE);
arc.setType(ArcType.ROUND);
handle = new Circle();
handle.setRadius(5);
handle.setStroke(Color.BLACK);
handle.setFill(Color.TRANSPARENT);
handle.setCenterX(
RX * Math.cos(Math.toRadians(S_ANGLE))
);
handle.setCenterY(
-RY * Math.cos(Math.toRadians(S_ANGLE))
);
connection = new Line();
connection.startXProperty().bind(arc.centerXProperty());
connection.startYProperty().bind(arc.centerYProperty());
connection.endXProperty().bind(handle.centerXProperty());
connection.endYProperty().bind(handle.centerYProperty());
handle.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
xMouse = event.getX();
yMouse = event.getY();
handle.setCenterX(xMouse);
handle.setCenterY(yMouse);
double angleInRadians = Math.atan2(-yMouse, xMouse);
arc.setStartAngle(Math.toDegrees(angleInRadians));
}
});
return new Group(arc, connection, handle);
}
public static void main(String[] args) {
launch(args);
}
}
先谢谢你了
好吧,我解决了它,足以将xMouse和yMouse除以大斧和小斧以使其工作。
newStartAngle = Math.atan2(-yMouse/radiusY, xMouse/radiusX)
//assume center x, y at 0,0
我正在为我的计算机科学课做凯撒密码,我被卡住了。我已经想出了如何满足项目所需的一些元素,比如空格,当加密密钥设置为一个固定的数字时,它就可以工作了。然而,其中一个要求是,当你点击“Z”时,字母表会环绕,用户可以输入他们自己的加密密钥值。它还需要加密和解密消息。任何提示,任何人可以给我关于哪里我走错了,将不胜感激!以下是我目前所拥有的:(我是在Eclipse中制作的)
问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf
我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL
我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。
将java转换为scala代码我面临一个奇怪的问题一个例子可以在这里找到https://gist.github.com/geoHeil/895260a04d3673b9848b345edf388a2d错误是 当试图将spark java转换为spark scala API时,我正在努力将这个java类https://github . com/DataSystemsLab/geos park/blo
当我运行程序而不是找到骑士之旅时,我收到了一个StackOverflow错误。任何想法是什么导致了这一点,以及我如何改变我的代码,实际上找到骑士之旅,并摆脱这个错误。项目是为我的CS280课程,并在周五到期,请帮助。谢谢!!