# Retrieve a particular point coordinate from an edge

Hi there,
In Ruby, would you have a clue that could help me to retrieve the x and y coordinate of a point located on a particular z coordinate (for instance 30) along a line starting on (0,0,0) to (10,10,100) ?
Cheers !
Manu

``````x = y = 10.0*(z/100.0)
``````
1 Like

Thanks, it"s so obvious!
What about a line starting from (0,0,0) to (20,45,100) ?
I should look back 30 years ago to my descriptive geometry “knowledge”

Yeah, it does rot with age The general equation of a line from P1 to P2 is

P = P1 + k(P2 - P1), 0.0 <= k <= 1.0

which broken down by component means

px = p1x + k(p2x - p1x)
py = p1y + k(p2y - p1y)
pz = p1z + k(p2z - p1z)

So, solve for k in any one of these equations and plug that into the other two.

In your second example, p1z = 0 and p2z - p1z = 100, so

k = pz/100.0 = 30.0/100.0 = 3.0/10.0

and

px = (3.0/10.0) * 20.0 = 6.0
py = (3.0/10.0) * 45.0 = 13.5

Note: Ruby does integer arithmetic if you don’t make it clear that you want real numbers. That’s why I put “.0” onto each value.

``````# Given an edge object
line = edge.line
# or from arbitrary points ...
# line = [Geom::Point3d.new(0,0,0), Geom::Point3d.new(20,45,100)]
plane = [Geom::Point3d.new(0, 0, 30.0), Z_AXIS]
point = Geom::intersect_line_plane(line,plane)
# Lastly test that point is non-nil for success.
``````
1 Like

Just to be 100% clear, what @DanRathbun showed uses methods from the SketchUp Ruby API, not simply Ruby. Depending on what else you are doing, his way might be more compatible with the rest of your code. Also, since the API methods are often wrappers around a compiled C routine, if this calculation is done in a loop for a lot of points, using the API might be faster.

``````line = [Geom::Point3d.new(0,0,0), Geom::Point3d.new(10,10,100)]