Code archives/3D Graphics - Maths/transform point onto plane
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
transforms a point (x, y, 0) on a plane to real world coords. The plane is defined by (nx,ny,nz,d), or: ax + by + cz + d = 0 where (a,b,c)=(nx,ny,nz) The code is not optimised, and I could not solve the 'roll' problem yet. At certain situations, the transformation turns 180 degrees upside down: http://www.gamedev.net/community/forums/topic.asp?topic_id=399701 | |||||
;input = (X,Y) on plane ;output = Transformed point Global resultx#, resulty#, resultz# Function PointOntoPlane(x#, y#, z#, nx#, ny#, nz#, d#) a# = 0 c# = ATan2(nx, ny) b# = ATan2(nz, Sqr(nx*nx+ny*ny)) ;apply yaw to point kx# = (Cos(-c) * z) - (Sin(-c) * x) ky# = y kz# = (Sin(-c) * z) + (Cos(-c) * x) ;apply pitch to point jx# = kx jy# = (Cos(-b) * ky) - (Sin(-b) * kz) jz# = (Sin(-b) * ky) + (Cos(-b) * kz) ;apply roll to point ix# = (Cos(-a) * jx) - (Sin(-a) * jy) iy# = (Sin(-a) * jx) + (Cos(-a) * jy) iz# = jz ;apply plane offset resultx# = ix# - nx*d resulty# = iy# - ny*d resultz# = iz# - nz*d End Function ;Resources: ;http://www.geocities.com/siliconvalley/2151/math3d.html ;http://www.gamedev.net/community/forums/topic.asp?topic_id=399701 |
Comments
| ||
Hi, have you a small code to see your funtion in action, please ? thanks |
| ||
Yes, the following rotates a plane, and transforms a number of points onto it. |
| ||
Why not use tformpoint instead? |
| ||
Why not use tformpoint instead? Even if this works out the same, it's good to have the underlying algorithm -- it'd port to BlitzMax, for example. |
Code Archives Forum