将两个Point对象相乘

时间:2009-09-25 10:15:22

标签: actionscript-3 geometry

我注意到在Java等其他语言中有像Vector2d这样的对象有一个乘法方法。我如何使用Actionscript 3做同样的事情?我知道PointVector3D类有add / substract方法,但都没有提供乘法/除法方法。

将两个Point对象相乘的最佳方法是什么?会是这样的吗?

var p1:Point = new Point(10, 20);
var p2:Point = new Point(30, 40);
var p3:Point = new Point((p1.x * p2.x), (p1.y * p2.y));

为什么会将这些类中的乘法/除法省略?

编辑* 以下是我在Java中看到的Vector2d类的链接:Java Vector2d multiply

3 个答案:

答案 0 :(得分:9)

new Point((p1.x * p2.x), (p1.y * p2.y))的数学意义是什么?在向量空间中,通常没有乘法,因为它根本不清楚,它应该做什么。

然而,在欧几里德空间的向量上定义了一个所谓的“标量乘法”,它产生一个数字(“标量”,因此得名):

double s = p1.x * p2.x + p1.y * p2.y;

这很有用,例如,如果你需要测试,线是否是正交的。但是,结果是数字而不是矢量。

与向量有关的另一件事是缩放它们:

double factor = 1.5;
Point p3 = new Point(factor * p1.x, factor * p2.y);

这里结果确实是一个点,但输入是数字向量,而不是两个向量。所以,除非你能说,你的向量乘法的解释/意义是什么,你不应该定义一个。 (注意,我不知道,你的提议是否有用 - 它根本不是我所知道的“标准”乘法)。

答案 1 :(得分:3)

我真的怀疑Java对于点或向量类有multiply个方法,因为对于这些对象来说,像“乘法”这样的概念的规范定义是不可能的。有一些操作通常称为“产品” - 多产品,交叉产品,复数乘法(通过识别复数和欧几里德平面) - 但它们都具有与通常的实数乘法的性质强烈不同的属性。您建议的分量乘法在几何上没有多大意义。所以没有明确的答案;通常你只需选择解决手头问题所需的“乘法”。

答案 2 :(得分:2)

(忘了完成帖子,现在出现了一些答案,很抱歉裁员)

好吧,基本上,这是因为在2d中乘以两个点并不真正有意义...向量乘积不存在于2维......标量乘积产生标量,如名称所示,因此一个Number ......唯一有意义的是complex产品:

var p3:Point = new Point(p1.x * p2.x - p1.y * p2.y, p1.x * p2.y + p1.y * p2.x);

当看polar coordinates时,你会发现p3的角度是p1和p2的角度之和,长度是产品......

即使在3d中,你也很少需要乘法的乘法......只有在极少数情况下你有一个3d物理引擎,其中包括angular momentumlorentz force ......

所以问题是:你打算到底做什么?乘法提供的结果是什么?