代码之家  ›  专栏  ›  技术社区  ›  Adam Harte

乘两点对象

  •  0
  • Adam Harte  · 技术社区  · 15 年前

    我注意到其他语言,如Java,有像向量2D这样的对象,它们具有乘法方法。我如何对ActionScript3执行相同的操作?我知道 Point Vector3D 类有加法/减法,但都不提供乘法/除法。

    两个点物体相乘的最佳方法是什么?它会像下面这样吗?

    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中看到的VCARD2D类的链接: Java Vector2d multiply

    3 回复  |  直到 11 年前
        1
  •  9
  •   Dirk    15 年前

    数学意义是什么 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);
    

    这里的结果确实是一个点,但是输入是 和A 矢量 不是两个向量。所以,除非你能说,向量乘法的解释/意义是什么,否则你不应该定义一个。(请注意,我不知道,你的建议是否有用——我知道这不是一个“标准”乘法)。

        2
  •  3
  •   Philipp    15 年前

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

        3
  •  2
  •   Taryn Frank Pearson    11 年前

    (忘了写完这篇文章,现在出现了一些答案,对多余的内容深表歉意)

    基本上,这是因为在二维空间中乘以两点是没有意义的。矢量积不存在于二维…如名称所示,标量积产生一个标量,因此 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中,你也很少需要向量的乘法…只有在少数情况下,你有一个三维物理引擎,其中包括 angular momentum lorentz force ……

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