Hi Brian,
> // P1 is a point in world coordinates, which is to be the temporary origin in coordinate frame.
> // P2 to be a suitable point for creating the frame x axis.
> // P3 to be a suitable point for creating the frame y axis.
> // The next 4 lines are correct, from Mirror script:
> var FrameOrigin = vM.createPoint(P1.x, P1.y, P1.z);
> var FrameXAxis = vM.createPoint(P2.x, P2.y, P2.z);
> var FrameYAxis = vM.createPoint(P3.x, P3.y, P3.z);
> var catFrame = vM.createFrame( FrameOrigin, FrameXAxis, FrameYAxis );
Which one is the "Mirror script" ?
One note is that here P2 and P3 should actually be vectors - meaning that they represent an oriented direction and not a point location.
The way a coordinate frame works is that there is one point for its origin and then 3 vector directions for x, y, and z axes. Often you'll just give it the x and y axis directions because the z axis can be calculated from those automatically by doing a cross product.
> // The first question is, given points P4 and P5, in world coordinates, will the
> // following code create points Pt4 and Pt5 in catFrame coordinates?
>
> var Pt4 = moi.coordinateFrame.evaluate.catFrame(P4.x, P4.y, P4.z);
> var Pt5 = moi.coordinateFrame.evaluate.catFrame(P5.x, P5.y, P5.z;)
The syntax here does not quite look correct - there isn't any coordinateFrame member function off of the root moi object, so doing: moi.coordinateFrame isn't going to do anything. I think you want to call something on catFrame directly, so more like: catFrame.evaluate( x, y, z );
But the .evaluate() method on a coordinate frame is for taking an x,y,z point that is in that coordinate system and converting into a world coordinate point. It basically starts at the frame's origin, then goes along the x axis direction of the frame by the x value that you pass in, and then the same for y and z values. So if for example you passed in just evaluate(0,0,0) that would give you back just the origin point. if you passed evalute(1,0,0) that would give back a point that was 1 unit away from the frame's origin in the x axis direction.
If you want to go the reverse way of getting a world coordinate point in terms of the frame's coordinate system then you would want to use the distance methods, you can do this:
var x = frame.distancex( pt );
var y = frame.distancey( pt );
var z = frame.distancez( pt );
And then that x,y,z point will be a point in that local coordinate system. Each of those calls returns the distance that the passed in point is located at along each frame axis direction, basically a plane that is formed from the origin point and the axis direction.
> // The second question is, having calculated point Pt6, the vertex of parametric catenary
> // curve between Pt4 and Pt5, using cosh, which I already know how to do,
> // will the following code convert point Pt6 back into world coordinates?
>
>
> var x = moi.coodinateFrame.distancex(catFrame.Pt6);
> var y = moi.coodinateFrame.distancey(catFrame.Pt6);
> var z = moi.coodinateFrame.distancez(catFrame.Pt6);
> var vertexPt6 = vM.createPoint( x, y, z );
So if I understand properly, you've got the reverse thing for this part - if you have an x,y,z that is in the local coordinate system of the frame, use the .evaluate() method on the frame to convert to a world coordinate value.
Hope this helps, please let me know if it does not make sense.
- Michael
|