diff --git a/ag.cc b/ag.cc index 7965755..5b79fb0 100644 --- a/ag.cc +++ b/ag.cc @@ -381,7 +381,7 @@ namespace ag if (argc == 4 || argc == 6) { bool valid = true; - for (int i = 0; i < argc; i++) + for (int i = 1; i <= argc; i++) { if (!lua_isnumber(L, i)) { @@ -392,7 +392,7 @@ namespace ag if (valid) { refptr< vector > args = new vector(); - for (int i = 1; i <= 6; i++) + for (int i = 1; i <= argc; i++) args->push_back(lua_tonumber(L, i)); addManagedObject(L, is_static, OdeWorld::PLANE, args); return 1; diff --git a/lib/std.lua b/lib/std.lua new file mode 100644 index 0000000..8626d73 --- /dev/null +++ b/lib/std.lua @@ -0,0 +1,45 @@ + +-- +-- Anaglym std library +-- +-- History: +-- 2009-11-02 Josh Holtrop Initial Revision +-- + +std = {} + +-- Compute the cross product of two vectors +-- Input: +-- vec1: the first vector (table; indices 1..3) +-- vec2: the second vector (table; indices 1..3) +-- Output: +-- The cross product vector (table; indices 1..3) +std.crossProduct = function(vec1, vec2) + local vec_result = {} + vec_result[1] = vec1[2] * vec2[3] - vec1[3] * vec2[2] + vec_result[2] = vec1[3] * vec2[1] - vec1[1] * vec2[3] + vec_result[3] = vec1[1] * vec2[2] - vec1[2] * vec2[1] + return vec_result +end + +-- Compute the dot product of two vectors +-- Input: +-- vec1: the first vector (table; indices 1..3) +-- vec2: the second vector (table; indices 1..3) +-- Output: +-- The dot product scalar +std.dotProduct = function(vec1, vec2) + return vec1[1] * vec2[1] + vec1[2] * vec2[2] + vec1[3] * vec2[3] +end + +-- Create a plane +-- Input: +-- x, y, z: coordinates of a point on the plane +-- nx, ny, nz: normal vector of the plane +-- Output: +-- Plane object (returned from ag.createPlane()) +std.createPlanePointNormal = function(x, y, z, nx, ny, nz) + -- calculate the d plane parameter based on the point coordinates + -- invoke the ag routine to create a plane based on a, b, c, d parameters + return ag.createPlane(nx, ny, nz, nx * x, ny * y, nz * z) +end