在 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
(可能还有其他地方)那么它应该可以工作。
我正在尝试使用 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
(可能还有其他地方)那么它应该可以工作。