Author Topic: Vector problems  (Read 1939 times)

Code: [Select]
function setchildpos(%parent, %child, %offset)
{
%curtransform = %parent.gettransform();
%u["x"] = getword(%curtransform,3);
%u["y"] = getword(%curtransform,4);
%u["z"] = getword(%curtransform,5);
%angl = getword(%curtransform,6) * -1;
%cos = mcos(%angl);
%sin = msin(%angl);
%a[1,1] = %cos + (%u["x"] * %u["x"] * (1 - %cos));
%a[1,2] = (%u["x"] * %u["y"] * (1 - %cos)) - (%u["z"] * %sin);
%a[1,3] = (%u["x"] * %u["z"] * (1 - %cos)) + (%u["y"] * %sin);
%a[2,1] = (%u["y"] * %u["x"] * (1 - %cos)) + (%u["z"] * %sin);
%a[2,2] = %cos + (%u["y"] * %u["y"] * (1 - %cos));
%a[2,3] = (%u["y"] * %u["z"] * (1 - %cos)) - (%u["x"] * %sin);
%a[3,1] = (%u["z"] * %u["x"] * (1 - %cos)) - (%u["y"] * %sin);
%a[3,2] = (%u["z"] * %u["y"] * (1 - %cos)) + (%u["x"] * %sin);
%a[3,3] = %cos + (%u["z"] * %u["z"] * (1 - %cos));
%pos = getwords(%curtransform,0,3);
%x = getword(%offset,0);
%y = getword(%offset,1);
%z = getword(%offset,2);
%newx = (%a[1,1] * %x) + (%a[1,2] * %y) + (%a[1,3] * %z);
%newy = (%a[2,1] * %x) + (%a[2,2] * %y) + (%a[2,3] * %z);
%newz = (%a[3,1] * %x) + (%a[3,2] * %y) + (%a[3,3] * %z);
%newoffset = %newx SPC %newy SPC %newz;
%totalpos = vectoradd(%pos, %newoffset);
%child.settransform(%totalpos SPC getwords(%curtransform, 3, 6));
}
Yay, works!