我注意到在Java等其他语言中有像Vector2d这样的对象有一个乘法方法。我如何使用Actionscript 3做同样的事情?我知道Point或Vector3D类有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
答案 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 momentum或lorentz force ......
所以问题是:你打算到底做什么?乘法提供的结果是什么?