Frequently Asked Questions > Practical Questions > Working with Animation >

# How do I keep a Plane aligned to 3 Point Helpers?

MAXScript FAQ > Working With Animation > How do I keep a Plane aligned to 3 Point Helpers?

## A user asked:

I have 3 Point Helpers which determines a plane in 3d space and I animated all of them randomly.

How can I keep a Plane object always oriented exactly to the plane determined by the Points?

## Answer:

This is a good place to use a Transform Script controller because we can control both the rotation (orientation) and position of the plane with it.

The following script

- Creates a Plane primitive

- Creates 3 Point Helpers

- Assigns a Transform Script and calculates a Matrix3 value which keeps the plane in the plane defined by the three points and centers it in the middle point between the helpers.

If you would move or animate the points, the Plane should follow.

SCRIPT:
     --Create a plane and 3 point helper
    thePlane = Plane()
    p1 = point pos:[40,-10,30]
    p2 = point pos:[20,30,40]
    p3 = point pos:[-10,-20,30]
    --Create a Transform Script and assign it to the Plane
    ctrl = transform_script()
    thePlane.transform.controller = ctrl
    --Create three Node variables and assign the Helpers to them
    ctrl.addNode"p1" p1
    ctrl.addNode"p2" p2
    ctrl.addNode"p3" p3
    --We create a variable to hold the expression --We calculate the vector from Point01 to Point02
    txt ="v1 = normalize (p2.pos-p1.pos)\n"
    --and the vector from Point01 to Point03
    txt +="v2 = normalize (p3.pos-p1.pos)\n"
    --The cross productof the two vectors is the normal to the plane
    txt +="nv1 = normalize (cross v1 v2)\n"
    --Thecross product ofthenormal and vector 1gives us a third axis
    txt +="nv2=normalize(cross nv1 v1)\n"
    --We create a matrix3 value using he first vector, --and the two cross products which are all orthogonal to each-other. --The translation part .row4 is the middle point --of the 3 points' positions:
    txt +="matrix3 v1 nv2 nv1 ((p1.pos+p2.pos+p3.pos)/3)"
    --Assign the expression to the script controller
    ctrl.setExpression txt

#### See Also

- Script Controllers

- transform_script: Matrix3Controller

- Frequently Asked Questions