# Documentation for *point* ## point:AddX Returns a point with the X coordinate changed by the parameter. If the parameter is zero, the original point is returned to avoid an allocation.

Pseudocode:
~~~~ Lua function point:AddX(x0) return point(self.x + x0, self.y, self.z) ~~~~ point **point:AddX**(number x0) number x0 : value to add to the x coordinate _returns_ point : new point with the x coordinate increased by x0 ## point:AddY Returns a point with the Y coordinate changed by the parameter. If the parameter is zero, the original point is returned to avoid an allocation.

Pseudocode:
~~~~ Lua function point:AddY(y0) return point(self.x, self.y + y0, self.z) ~~~~ point **point:AddY**(number y0) number y0 : value to add to the y coordinate _returns_ point : new point with the y coordinate increased by y0 ## point:AddZ Returns a point with the Z coordinate changed by the parameter.

Pseudocode:
~~~~ Lua function point:AddZ(z0) return point(self.x, self.y, self.z + z0) ~~~~ point **point:AddZ**(number z0) number z0 : value to add to the z coordinate _returns_ point : new point with the z coordinate increased by z0 ## point:IsValidZ Checks if the point has a valid Z coordinate.

bool **point:IsValidZ**() _returns_ bool : true if the point's Z coordinate is valid (i.e. different from the special value InvalidZ, denoting on-the-terrain points). ## point:Normalize Returns a point with the same vector direction, but with vector length 4096. If z == InvalidZ, normalizes only in the 2D plane XY coordinates.
point **point:Normalize**() _returns_ point n : a point with length 4096 with the same direction as the original point. ## point:SetInvalidZ Returns a new point with the Z coordinate set to the special value InvalidZ, denoting a point on the terrain surface.
point **point:SetInvalidZ**() ## point:SetLen Returns a point with the same vector direction, but with set vector length. If z == InvalidZ, only sets the length of the XY coordinates.
point **point:SetLen**(int len) int len : desired vector length of the output point. _returns_ point p : a point with vector length set to *len* and the same direction as the original point. ## point:SetLen2D Returns a point with the same vector direction in the XY plane, but with a set vector len. Ignores the Z coordinate of the original point. Sets the output Z to InvalidZ.
point **point:SetLen2D**(int len) int len : desired vector length of the output point. _returns_ point p : a point with vector length in the XY plane set to *len*, z == InvalidZ, and the same direction as the original point. ## point:SetTerrainZ Returns a new point with Z set to the terrain/walkable height at these XY coordintes.
point **point:SetTerrainZ**() _returns_ point : a new point with Z set to the terrain/walkable height at XY ## point:SetX Returns a point with the X coordinate set to the parameter.

Pseudocode:
~~~~ Lua function point:SetX(x0) return point(x0, self.y, self.z) ~~~~ point **point:SetX**(number x0) number x0 : new x coordinate value _returns_ point : new point with the x coordinate set to x0 ## point:SetY Returns a point with the Y coordinate set to the parameter. If the parameter is equal to the current coordinate value, the original point is returned to avoid an allocation.

Pseudocode:
~~~~ Lua function point:SetY(y0) return point(self.x, y0, self.z) ~~~~ point **point:SetY**(number y0) number y0 : new y coordinate value _returns_ point : new point with the y coordinate set to y0 ## point:SetZ Returns a point with the Z coordinate set to the parameter.

Pseudocode:
~~~~ Lua function point:SetZ(z0) return point(self.x, self.y, z0) ~~~~ point **point:SetZ**(number z0) number z0 : new z coordinate value _returns_ point : new point with the z coordinate set to z0 ## point:x Returns the x coordinate of the point.

number **point:x**() _returns_ x : the x coordinate of the point ## point:xy Returns the x and y coordinates of the point.

number, number **point:xy**() _returns_ x, y : the x and y coordinates of the point ## point:xyz Returns the coordinates of the point. Two return values are returned if the point has InvalidZ.

number, number, number **point:xyz**() _returns_ x, y, z : the coordinate of the point ## point:y Returns the y coordinate of the point.

number **point:y**() _returns_ y : the y coordinate of the point ## point:z Returns the z coordinate of the point.

number **point:z**() _returns_ z : the z coordinate of the point, or nil if it's InvalidZ ## LimitLen Returns a point with the same vector direction, but with vector length limited to the specified length. If the point already has a vector length no greater than the parameter, returns it unmodified.
point **LimitLen**(point pt, int length) _returns_ point : a new point with the same vector direction as the original point ## point Creates a point from two or three number coordinates. If only two are supplied, Z = InvalidZ (the point is on the terrain).

point **point**(number x, number y [, number z]) x, y, z : the coordinates of the new point _returns_ point : the created point (insert footer.md.html here)