Mapping parts on 2D plane to get X and Y offset round center pos

How would I map parts onto a 2D plane to get the x and y offset from a center part (Green) irregardless of orientation?
As an example:


And with rotation:

bluePart.CFrame = greenPart.CFrame + greenPart.CFrame.vectorToWorldSpace(Vector3.new(bla, bla, bla))
1 Like

You could do something like:

 offset = bluePart.CFrame:ToObjectSpace(greenPart.CFrame).p
1 Like

vsnry and Vulkarin were close, but what you’ll actually want to do is something like this:

function PointToPlaneSpace(point, planeCFrame)
    return planeCFrame:PointToObjectSpace(point)
end

--this assumes that the "flat" face of the blue part is the "Front" face.
local pointInPlaneSpace = PointToPlaneSpace(greenPart.Position, bluePart.CFrame) 

CFrame:PointToObjectSpace(point) converts a point in world space (the coordinates you are used to) to the coordinate system that’s centered around CFrame (and rotated according to CFrame). So if point is 3 studs in front of CFrame, the Z component of the returned value will be -3. Same with the X (left/right) and Y (up/down) coordinates.

If you only want the X and Y parts, you can get those just by doing

local x, y = pointInPlaneSpace.X, pointInPlaneSpace.Y

If you still want it in the form of a Vector3, you can use this handy trick:

local xyOffset = pointInPlaneSpace * Vector3.new(1, 1, 0)
2 Likes

What? My solution is exactly what they asked for