2009-09-25 62 views
0

我已经注意到在其他语言(如Java)中,存在Vector2d等具有乘法方法的对象。我将如何做与Actionscript 3相同?我知道PointVector3D类具有添加/减法方法,但都不提供乘法/除法方法。将两个Point对象相乘

将两个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

回答

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); 

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

+0

确切地说,对于那些被包含在几何图书馆中的东西,它们必须具有几何解释。我不知道任何这样的笛卡尔坐标乘法的解释。标量产品与想到的最接近,但可以在线性代数库中找到,而不是几何图形库。 – jbasko 2009-09-25 10:54:23

+0

还有当你想要创建一个曲面的法线向量时(阴影),这个十字产品是非常有用的。 – 2009-09-25 10:58:55

+0

是的忘记了那个。虽然交叉乘积只针对R^3中的向量进行定义,而对于任何n> 0的IIRC,R^n都定义了标量乘积和标度。 – Dirk 2009-09-25 11:07:44

3

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

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的角度之和nd p2,长度是产品...

即使在3D,你很少需要载体的乘法......只有你有一个3D物理引擎,包括东西angular momentumlorentz force极少数情况下...

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