在 Javascript 中实现算法

Implementing an algorithm in Javascript

我正在尝试使用 javascript.So 实现此处提供的算法 Lets Build A 3D Graphics Engine 到目前为止,我已经做到了这一点,但它无法正常工作。这是代码。

    var Class = function(methods) {
      var klass = function() {
        this.initialize.apply(this, arguments);
      };

      for (var property in methods) {
        klass.prototype[property] = methods[property];
      }

      if (!klass.prototype.initialize) klass.prototype.initialize = function() {};

      return klass;
    };


     // Point class


    var Point = Class({

      initialize: function(x, y, z)

      {
        var tuple;
        this.tuple = [x, y, z];
      },

      addVectorToPoint: function(Vector)

      {
        var a = this.tuple[0] + Vector.tuple[0];

        var b = this.tuple[1] + Vector.tuple[1];

        var c = this.tuple[2] + Vector.tuple[2];

        return [a, b, c];

      },

      subtractVectorFromPoint: function(Vector)

      {
        var a = this.tuple[0] - Vector.tuple[0];

        var b = this.tuple[1] - Vector.tuple[1];

        var c = this.tuple[2] - Vector.tuple[2];

        return [a, b, c];

      },

      subtractPointFromPoint: function(Point)

      {
        var a = this.tuple[0] - Point.tuple[0];

        var b = this.tuple[1] - Point.tuple[1];

        var c = this.tuple[2] - Point.tuple[2];

        return [a, b, c];

      },



      drawPoint: function()

      {
        document.writeln(this.tuple);
      }

    });





     // Vector class..............

    var Vector = Class({

      initialize: function(X, Y, Z)

      {
        var tuple;
        this.tuple = [X, Y, Z];
      },

      addVectorToVector: function(Vector)

      {
        var a = this.tuple[0] + Vector.tuple[0];

        var b = this.tuple[1] + Vector.tuple[1];

        var c = this.tuple[2] + Vector.tuple[2];

        return [a, b, c];

      },

      subtractVectorFromVector: function(Vector)

      {
        var a = this.tuple[0] - Vector.tuple[0];

        var b = this.tuple[1] - Vector.tuple[1];

        var c = this.tuple[2] - Vector.tuple[2];

        return [a, b, c];

      },

      drawPoint: function()

      {
        document.writeln(this.tuple);
      }

    });
<!DOCTYPE html>

<html lang="en">

<head>



</head>


<body>





  <script src="new.js"></script>

  <script>
    var point1 = new Point(1, 2, 1);
    var point2 = new Point(0, 4, 4);
    var vector1 = new Vector(2, 0, 0);
    var vector2;

    point1.drawPoint(); //should display (1,2,1)
    point2.drawPoint(); //should display (0,4,4)
    vector1.drawPoint();

    vector2 = point1.subtractPointFromPoint(point2);

    vector1 = vector1.addVectorToVector(vector2);

    point1.addVectorToPoint(vector1);
    point1.drawPoint(); //should display (4,0,-2)

    point2.subtractVectorFromPoint(vector2);
    point2.drawPoint(); //should display (-1,6,7)
  </script>


</body>

</html>

它给我提供了这个错误。

TypeError: Vector.tuple is undefined new.js:95

请尽快帮忙。 提前谢谢客栈

你的函数 subtractPointFromPoint returns 一个元组 return [a, b, c]; 然后你传递给 addVectorToVector 然后你在它上面取 .tuple。这就是为什么它不起作用。我假设如果你改变

return [a, b, c];

return new Vector(a, b, c);

subtractPointFromPoint(可能还有其他地方)那么它应该可以工作。