Javascript 如何在画布上找到两个向量之间的角度?

Javascript 如何在画布上找到两个向量之间的角度?,javascript,math,canvas,geometry,Javascript,Math,Canvas,Geometry,我需要在画布上找到两个向量之间的角度。 我在下面附上一些例子: 你能告诉我一些配方吗?我在学校数学方面有问题:)首先,你需要规范化这两个向量 一旦做到了,你就可以做到 angle = arcos(v1•v2) 其中“angle”是要查找的角度,“arcos”是余弦函数的逆函数,“•”是点积运算符 小心,这将只返回相对和原始角度。您将无法知道哪个向量在左边,哪个向量在右边。首先,您需要对这两个向量进行规范化 一旦做到了,你就可以做到 angle = arcos(v1•v2) 其中“angl

我需要在画布上找到两个向量之间的角度。 我在下面附上一些例子:


你能告诉我一些配方吗?我在学校数学方面有问题:)

首先,你需要规范化这两个向量

一旦做到了,你就可以做到

angle = arcos(v1•v2)
其中“angle”是要查找的角度,“arcos”是余弦函数的逆函数,“•”是点积运算符


小心,这将只返回相对和原始角度。您将无法知道哪个向量在左边,哪个向量在右边。

首先,您需要对这两个向量进行规范化

一旦做到了,你就可以做到

angle = arcos(v1•v2)
其中“angle”是要查找的角度,“arcos”是余弦函数的逆函数,“•”是点积运算符


小心,这将只返回相对和原始角度。你将无法知道哪个向量在左边,哪个向量在右边。

基本上你需要把连接两个向量的点作为原点,其中x=0,y=0

请看这张照片:

现在我们可以说点ABC的x和y值为:

  • A=0 | 0
  • B=0 |-6
  • C=5 | 2
要计算两者的反正切,我们可以使用Math.atan2()函数。请注意,atan2的第一个参数必须是y值

var firstAngle = Math.atan2(-6, 0);
var secondAngle = Math.atan2(2, 5);
通过减法得到它们的差

var angle = secondAngle - firstAngle;
这将返回一个弧度值,您可以将其转换为度,如下所示:

angle = angle * 180 / Math.PI;

基本上,你需要把连接两个向量的点作为原点,其中x=0,y=0

请看这张照片:

现在我们可以说点ABC的x和y值为:

  • A=0 | 0
  • B=0 |-6
  • C=5 | 2
要计算两者的反正切,我们可以使用Math.atan2()函数。请注意,atan2的第一个参数必须是y值

var firstAngle = Math.atan2(-6, 0);
var secondAngle = Math.atan2(2, 5);
通过减法得到它们的差

var angle = secondAngle - firstAngle;
这将返回一个弧度值,您可以将其转换为度,如下所示:

angle = angle * 180 / Math.PI;


它是一个向量还是一个线段?我有每条线的起点,所以我猜它是一个向量,长度是5''0'和4''3'?或者是那些坐标?是它们的长度。那么图片上的0坐标在哪里?是矢量还是线段?我有每条线的起点,所以我猜它是一个矢量,它们的长度是5'0'和4'3'?还是那些坐标?这是它们的长度。那么图片上的0坐标在哪里?如何计算这个v1*v2?V1和V2由两个点组成。即使您没有对其进行规范化,它也可以工作。如果你使用右手法则,你可以从右到左知道:取叉积。这个符号告诉你是左还是右。如何计算这个v1*v2?V1和V2由两个点组成。即使您没有对其进行规范化,它也可以工作。如果你使用右手法则,你可以从右到左知道:取叉积。标志告诉你是左还是右。0 |-6和5 | 2不是点,而是长度。但这并不重要。我将尝试发表评论。非常感谢。我使用了这个公式,但是当我像第一张图片那样构建形状时,我得到了0。但实际角度是90度。如果我用-5 | 0表示左上角点,用0 | 5表示右下角点,我得到了90度——正如预期的那样。对于C 5,2不是正确的坐标。这就是长度,别搞混了,我不是说长度(向量的大小)。我说的是从中心点A开始的方向。在我上面的回答中,你必须向右走5个街区,向下走2个街区才能从点A到点C->这是向量。你照片上的长度是5只是巧合“2”也是。0 |-6和5 | 2不是点,而是长度。但这并不重要。我将尝试发表评论。非常感谢。我使用了这个公式,但是当我像第一张图片那样构建形状时,我得到了0。但实际角度是90度。如果我用-5 | 0表示左上角点,用0 | 5表示右下角点,我得到了90度——正如预期的那样。对于C 5,2不是正确的坐标。这就是长度,别搞混了,我不是说长度(向量的大小)。我说的是从中心点A开始的方向。在我上面的回答中,你必须向右走5个街区,向下走2个街区才能从点A到点C->这是向量。这只是一个巧合,你照片上的长度也是5“2”。