Geom

module Geom

Parent: N/A | Class Index
Methods:closest_points, fit_plane_to_points, intersect_line_line, intersect_line_plane, intersect_plane_plane, linear_combination, point_in_polygon_2d |
Sample Code:GeomTests.rb |

The Geom module defines a number of Module methods that let you perform different geometric operations.
The methods in this module take lines and planes as arguments. There is no special class for representing lines or planes.
A line can be represented as either an Array of a point and a vector, or as an Array of two points.
line = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)]
line = [Geom::Point3d.new(0,0,0), Geom::Point3d.new(0,0,100)]
A plane can be represented as either an Array of a point and a vector, or as an Array of 4 numbers that given the coeficients of a plane equation.
plane = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)]
plane = [0,0,1,0]
NOTE: Lines and Planes are infinite.
There are several good books on 3D math if you are new to the concepts of a line, plane, and vector.

Module Methods

closest_points
The closest_points method is used to compute the closest points on two lines.
Syntax:
pts = Geom.closest_points line1, line2
Arguments:
Return Value:
pts - an array of two points. The first point is on the first line and the second point is on the second line.
Comments:
Example:
line1 = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] line2 = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,100)] # 0,0,0 on each line should be closest because both lines start from # that point pts = Geom.closest_points line1, line2

fit_plane_to_points
The fit_plane_to_points method is used to compute a plane that is a best fit to an array of points
Syntax:
plane = Geom.fit_plane_to_points points plane = Geom.fit_plane_to_points point1, point2, point3, ...
Arguments:
points - an array of points point1, point2, point3 - Point3D objects
Return Value:
plane - a plane
Comments:
If more than three points are given, some of the points may not be on the plane. The plane is returned as an Array of 4 numbers which are the coefficients of the plane equation Ax + By + Cz + D = 0
Example:
point1 = Geom::Point3d.new 0,0,0 point2 = Geom::Point3d.new 10,10,10 point3 = Geom::Point3d.new 25,25,25 plane = Geom.fit_plane_to_points point1, point2, point3

intersect_line_line
The intersect_line_line computes the intersection of two lines.
Syntax:
point = Geom.intersect_line_line line1, line2
Arguments:
line1, line2 - A line is given as either an array of a point and a vector, or an Array or two points.
Return Value:
Returns nil if they do not intersect.
Comments:
Example:
line1=[Geom::Point3d.new(10,0,0),Geom::Vector3d.new(1,0,0)] line2=[Geom::Point3d.new(0,10,0),Geom::Point3d.new(20,10,0)] pt = Geom.intersect_line_line(line1, line2) This will return the point (10,10,0).

intersect_line_plane
The intersect_line_plane method is used to compute the intersection of a line and a plane.
Syntax:
point = Geom.intersect_line_plane line, plane
Arguments:
line - a line plane - a plane
Return Value:
point - a Point3d object
Comments:
Example:

# This is really the normal which follows the x axis. The plane is
# perpendicular
plane1 = [Geom::Point3d.new(-10, 0 ,0), Geom::Vector3d.new(1,0,0)]
# This line follows the x axis
line1 = [Geom::Point3d.new(-10,0,0), Geom::Vector3d.new(1,0,0)]
# returns -10, 0, 0
pt = Geom.intersect_line_plane(line1, plane1)

intersect_plane_plane
The intersect_plane_plane method is used to compute the intersection of two planes.
Syntax:
line = Geom.intersect_plane_plane plane1, plane2
Arguments:
plane1, plane2 - planes
Return Value:
line - a line where the planes intersect if successful. Returns nil if the planes do not intersect.
Comments:
Example:

# This is really the normal which follows the x axis. The plane is
# perpendicular (or parallel to the Y axis)
plane1 = [Geom::Point3d.new(-10, 0 ,0), Geom::Vector3d.new(1,0,0)]
# This is really the normal which follows the y axis. The plane is
# perpendicular (or parallel to the X axis)
plane2 = [Geom::Point3d.new(0,-10,0), Geom::Vector3d.new(0,1,0)]
# returns (-10,-10,0")(0.0,0.0,1.0)
line = Geom.intersect_plane_plane(plane1, plane2)

linear_combination
The linear_combination method is used to compute the linear combination of points or vectors.
Syntax:
point = Geom.linear_combination(weight1, point1, weight2, point2) vector = Geom.linear_combination(weight1, vector1, weight2, vector2)
Arguments:

weight1 - a weight or percentage

point1 - the start point on the line

weight2 - a weight or percentage

point2 - the end point of the line

vector1 - the first vector

vector2 - the end point of the line

Return Value:
point - point - a Point3d object vector - vector - a Vector3d object
Comments:
Example:
point1 = Geom::Point3d.new 1,1,1 point2 = Geom::Point3d.new 10,10,10 # Gets the point on the line segment connecting point1 and point2 that is # 3/4 the way from point1 to point2. point = Geom.linear_combination 0.25, point1, 0.75, point2

point_in_polygon_2D
The point_to_polygon_2D method is used to determine whether a point is inside a polygon when that point is projected as though it and the polygon were in 2D space. The Z component is ignored.
Syntax:
status = Geom.point_to_polygon_2D point, points,
Arguments:
point - a Point3d object points - an array of points that represent the points of the polygon you are checking border - true if a point on the border is counted as inside the polygon.
Return Value:
status - true if the point is inside the polygon. False if the point is not inside the polygon.
Comments:
Example: