13.03.2013, 16:35
(
Последний раз редактировалось Pottus; 13.03.2013 в 17:44.
)
I'll give it a shot thanks for the suggestion! I'll need to re-write these functions slightly but that isn't hard.
Edit - Works perfectly new functions....
Thanks again YJIET
Edit - Works perfectly new functions....
Код:
stock ObjectRotateZ(Float:RX, Float:RY, Float:RZ, Float:rot_z, &Float:NewRX, &Float:NewRY, &Float:NewRZ) { new Float:sinx, Float:siny, Float:sinz, Float:cosx, Float:cosy, Float:cosz; FloatConvertValue(RX, RY, RZ, sinx, siny, sinz, cosx, cosy, cosz); // Convert from one euler angle sequence (ZXY) to another and add the rotation FloatConvertValue(asin(cosx * cosy), atan2(sinx, cosx * siny) + rot_z, atan2(cosy * cosz * sinx - siny * sinz, cosz * siny - cosy * sinx * -sinz), sinx, siny, sinz, cosx, cosy, cosz); // Convert back to the original euler angle sequence and apply the new rotation to the object NewRX = asin(cosx * siny), NewRY = atan2(cosx * cosy, sinx), NewRZ = atan2(cosz * sinx * siny - cosy * sinz, cosy * cosz + sinx * siny * sinz); return 1; } stock FloatConvertValue(Float:rot_x, Float:rot_y, Float:rot_z, &Float:sinx, &Float:siny, &Float:sinz, &Float:cosx, &Float:cosy, &Float:cosz) { sinx = floatsin(rot_x, degrees); siny = floatsin(rot_y, degrees); sinz = floatsin(rot_z, degrees); cosx = floatcos(rot_x, degrees); cosy = floatcos(rot_y, degrees); cosz = floatcos(rot_z, degrees); return 1; }