私はゲームのモッズをやっています。私は三角法ではあまりよくありません。これらの数学トリグ(3Dゲームの世界)操作を「逆転」する
私は3Dワールドの中で、いくつかの角度(z角度)を持ったある位置に車両を持っています。私はまた、そのすぐ隣にオブジェクトがあり、XYZの位置と回転を持っています。オブジェクトを車両に取り付けたいが、それを取り付けるには、実世界の位置ではなく、車両に対するオフセットを指定する必要がある。 これは「車両協調システム」です。 vehicle attachment coords
これは問題ではありません。私はすでにそれをしない、このコードがあります。
new Float:ofx, Float:ofy, Float:ofz, Float:ofangle;
new Float:attachX, Float:attachY;
new Float:vehX, Float:vehY, Float:vehZ, Float:vehAngle;
GetVehiclePos(vehicleid, vehX, vehY, vehZ); // get vehicle XYZ pos
GetVehicleZAngle(vid, vehAngle); // get vehicle facing angle
ofx = x-vehX; // x = object's real world XYZ, vehX - vehicle's XYZ. Calculate real world offset between object and vehicle
ofy = y-vehY;
ofz = z-vehZ;
ofangle = rz-vehAngle;
// calculate attach offsets relative to vehicle (see image above)
attachX = ofx*floatcos(vehAngle, degrees) + ofy*floatsin(vehAngle, degrees);
attachY = -ofx*floatsin(vehAngle, degrees)+ ofy*floatcos(vehAngle, degrees);
AttachObjectToVehicle(objectid, vehicleid, attachX, attachY, ofz, rx, ry, ofangle); // attach object with calculated X, Y and angle
を、これは素晴らしい作品が、私は今、やりたい、これを「逆」することです。 私はだから私はこれを持って (それが今とまったく同じ場所にあってもよいが、付属しません)オブジェクトの現実世界の位置を計算したい:
new Float:vehX, Float:vehY, Float:vehZ, Float:vehAngle;
GetVehiclePos(vehicleid, vehX, vehY, vehZ);
GetVehicleAngle(vehicleid, vehAngle);
new Float:objAttachX, Float:objAttachY, Float:objAttachZ, Float:objAttachRotX, Float:objAttachRotY, Float:ObjAttachRotZ);
GetAttachedObjectOffsets(objectid, objAttachX, objAttachY, objAttachZ);
GetAttachedObjectRotation(objectid, objAttachRotX, objAttachRotY, objAttachRotZ);
// now, using current vehicle position and the object's attachment offsets, somehow calculate the objects position in real world.
誰かが私を助けることができれば、私は喜んでいるだろうこれは本当にシンプルですが、私はそれを理解することはできません。