我有一个由两个向量组成的线段,比如说 v1 和 v2,一个向量 v3 和一个角度a。如何在 Java 中编写一个方法(我也使用 Apache Commons Math 来表示一个向量),它给了我一个向量 v4,以便线段 v1-v2 和 v3-v4 成角度a? 有无限的 v4 元素,如果我可以为该方法指定一个大小,以便线段 v3-v4 具有该大小,那就更好了。(都在二维空间中,角度可以是弧度或度数,没关系)
编辑:正如承诺的那样,我已经包含了我正在尝试解决的问题的图像。我有一个由 2 个向量定义的线段(这条线有点长,但没关系)、一个角度和第三个点。我需要绘制第二条线,它与第一条线以角度a相交。由于 Javafx 中的所有线条(我在这里使用)都是通过定义两个点来绘制的,因此我需要找到红点(或任何可能的红点)。
编辑:使用阿里的回答,我得到了以下方法,它可以满足我的需要:
public Pair<Vector2D, Vector2D> calculateFourthPoint(Vector2D v1, Vector2D v2, Vector2D v3, double angleInDegrees) {
Vector2D r = v1.subtract(v2);
double rx = r.getX();
double ry = r.getY();
double angle = toRadians(angleInDegrees);
double a = pow(rx, 2) + pow(ry, 2);
double b = 2 * sqrt(pow(rx, 2) + pow(ry, 2)) * cos(angle) * rx;
double c = pow(rx, 2) * pow(cos(angle), 2) + pow(ry, 2) * pow(cos(angle), 2) - pow(ry, 2);
double discriminant = sqrt(pow(b, 2) - (4 * a * c));
double sx1 = (-b + discriminant) / (2 * a);
double sx2 = (-b - discriminant) / (2 * a);
double sy1 = sqrt(1 - pow(sx1, 2));
double sy2 = sqrt(1 - pow(sx2, 2));
Vector2D s1 = new Vector2D(sx1, sy1);
Vector2D s2 = new Vector2D(sx2, sy2);
Vector2D v4_1 = v3.subtract(s1);
Vector2D v4_2 = v3.subtract(s2);
return new Pair<Vector2D, Vector2D>(v4_1, v4_2);
}