【发布时间】:2016-07-05 22:15:26
【问题描述】:
所以我有以下问题让我感到困惑,我不知道该怎么做:
我有两个相交的向量。向量可以来自各种不同的角度,如下两张图:
交点也是已知的,它使用叉积计算,我从this 得到了它背后的数学。向量的起点和终点也是已知的。
现在我有一条长度为 X 的线,我想知道这条线在这两个向量之间的哪个位置完全吻合。然后从向量中知道这些点的坐标。我认为这张图片能更好地描述它:
当然,一条长度为 X 的线可以通过多种不同的方式拟合两个向量,例如以下两张图片显示了向量 A 和 B 之间线 X 的不同位置,其中线的长度相同,但位置和角度不同:
如果可能的话,我希望位置的差异由向量的长度决定。因此,如果向量 B 是向量 A 的 5 倍长,那么 S 到线与向量 B 相接触处的距离应该是 S 到线与向量 A 相接触处距离的 5 倍。如上右图所示S到直线与向量B相接处的距离远大于S到直线与向量A相接处的距离。
找出这条线的位置的最佳方法是什么?那么,线在向量 A 的哪个位置开始,在向量 B 的哪个位置结束?我想在 C++ 中实现这一点,但是计算两个向量上每个点之间的距离并检查这是否等于 X 似乎非常密集,并且对于浮点数是不可能的。
编辑:找到解决方案。下面我举一个小例子。
- 假设角度 c(矢量 A 和矢量 B 之间的角度)为 90 度。
- 比率为 1:2(因此 B 是 A 的两倍)。
- 最后边 C 是 30。
您要做的是为向量 A 和 B 的长度编一个数字。我使用this 站点发现的是,您是否在 A 和 B 边填写 4 和 8,或 8 和 16 或任何其他具有 1:2 比例的东西,角度 a 在所有情况下都是相同的,角度 b 也是如此。因此,要计算角度 a 和 b,只需使用例如 5 和 10。您首先要做的(或至少我是这样做的)是使用角度 c 计算边 C,使用以下公式计算边 A 和 B:
sqrt(sideA * sideA + sideB * sideB - 2 * sideA * sideB * cos(degreesToRadian(angleC)));。请注意,这不是同一边 C 和给定的那一侧,而只是用于计算角度的一侧。
之后,您可以使用以下公式计算角度 a:
radianToDegrees(acos((sideB * sideB + sideC * sideC - sideA * sideA) / (2 * sideB * sideC)))
现在您已经找到了角 a,您将拥有三角形中的所有角。因为您已经知道角度 c,所以您只需计算 a 和 b = 180 - a - c。最后要做的是使用角度 c 计算边 A 和边 B,使用以下公式计算角度 a 和给定边 C:
sideB * sin(degreesToRadian(angleA)) / sin(degreesToRadian(angleB))
当您将它们放在一个函数中,该函数将其作为参数:(float angleC,float ratioB,float sideC)。在我们的例子中是 (90, 0.5, 30)。然后计算如下:
float fakeSideA = 10;
float fakeSideB = fakeSideA * ratioB;
float fakeC = sqrt(fakeSideA * fakeSideA + fakeSideB * fakeSideB - 2 * fakeSideA * fakeSideB * cos(degreesToRadian(angleC)));
float angleA = radianToDegrees(acos((fakeSideB * fakeSideB + fakeC * fakeC - fakeSideA * fakeSideA) / (2 * fakeSideB * fakeC)));
float sideA = sideC * sin(degreesToRadian(angleA)) / sin(degreesToRadian(angleC));
std::cout << "SideA: " << sideA << ", AngleA: " << angleA << ", SideC: " << sideC << ", AngleC: " << angleC << std::endl;`
输出应类似于:SideA: 26.8328, AngleA: 63.435, SideC: 30, AngleC: 90。哪个是对的。知道 sideA 是 S 与长度为 X 的直线与向量 A 接触的位置之间的长度,您就可以计算出它的坐标。
【问题讨论】:
-
"这条线应该是向量 B 的 5 倍" 这是什么意思?
-
@Rakete1111 S 和直线接触向量 B 的距离应该是 S 和直线接触向量 A 的距离的五倍。我希望能更好地解释它,我'将在其中进行编辑。
-
有道理,谢谢:)
-
你的意思是你有两条线,或线段在一点相交?向量没有相交的概念。
-
圈子有用吗?一个圆圈是所有点所在的位置,它们之间的距离是恒定的。