angle_2vectors(v1,v2) { return acos(((v1.x*v2.x + v1.y*v2.y + v1.z*v2.z) / (vlen(v1)*vlen(v2)))); } main(doc,op) { var theta=angle_2vectors(cursor-curpos,vector(100,0,0)); curpos += sin(theta*bmultiply)*bscale*10*curnorm; var m=new(Matrix); var rot=new(Matrix); var dist=200-vlen(cursor-curpos); rot->SetRotY(dist/2000); m=m->GetMulM(rot); curpos=m->GetMulP(curpos); }