2023年11月26日星期二(四元數)

2021-06-19 22:57:01 字數 3134 閱讀 8969

這一節 ,應該是個一點點進行

quat     q1=,

先看下quat資料型別 //

四元數

typedef

struct quat_typ

;struct ;

};}quat, * quat_ptr;

先進行3d方向向量旋轉乙個角度來初始化乙個四元數

旋轉是四元數中非常重要的用途,

void ddraw_math::vector3d_theta_to_quat(quat_ptr q, vector3d_ptr v, float theta)

void ddraw_math::quat_normalize(quat_ptr q)

四元數的逆為共軛/模的平方

void ddraw_math::quat_inverse(quat_ptr q, quat_ptr qi)

void ddraw_math::quat_inverse(quat_ptr q)

根據繞x,y,z軸旋轉的角度,建立乙個zyx順序旋轉對應的四元數

void ddraw_math::eulerzyx_to_quat(quat_ptr q, float theta_z, float theta_y, float theta_x)

{float                 cos_z_2                   = 0.5 * cosf( theta_z );

float                 cos_y_2                   = 0.5 * cosf( theta_y );

float                 cos_x_2                   = 0.5 * cosf( theta_x );

float                 sin_z_2                   = 0.5 * sinf( theta_z );

float                 sin_y_2                   = 0.5 * sinf( theta_y );

float                 sin_x_2                    = 0.5 * sinf( theta_x );

q->w                                        = cos_z_2 * cos_y_2 * cos_x_2 + sin_z_2 * sin_y_2 * sin_x_2;

q->x                                        = cos_z_2 * cos_y_2 * sin_x_2 - sin_z_2 * sin_y_2 * cos_x_2;

q->y                                        = cos_z_2 * sin_y_2 * cos_x_2 + sin_z_2 * cos_y_2 * sin_x_2;

q->z                                        = sin_z_2 * cos_y_2 * cos_x_2 - cos_z_2 * sin_y_x * sin_x_2;

下一步進行單位四元數轉換為乙個單位方向向量和乙個繞該向量旋轉的角度。

void ddraw_math::quat_to_vector3d_theta(quat_ptr q, vector3d_ptr v, float *theta)

{* theta                                         = acosf( q->w );

float                 sinf_theta_inv            = 1.0 / sinf( * theta );

v->x                                        = q->x * sinf_theta_inv;

v->y                                        = q->y * sinf_theta_inv;

v->z                                        = q->z * sinf_theta_inv;

*theta                                          *= 2;

對四元數的放縮。

void ddraw_math::quat_scale(quat_ptr q, float scale, quat_ptr qs)

{qs->x                                           = scale * q->x;

qs->y                                           = scale * q->y;

qs->z                                           = scale * q->z;

qs->w                                           = scale * q->w;

另一種形式

void ddraw_math::quat_scale(quat_ptr q, float scale)

{q->x                                        = scale * q->x;

q->y                                        = scale * q->y;

q->z                                        = scale * q->z;

q->w                                        = scale * q->w;

計算四元數的長度。

float ddraw_math::quat_norm(quat_ptr q)

{return ( sqrtf( q->x * q->x + q->y * q->y + q->z * q->z + q->w * q->w ) );

擴充套件到計算四元數長度的平方。

float ddraw_math::quat_norm2(quat_ptr q)

{return ( q->x * q->x + q->y * q->y + q->z * q->z + q->w * q->w  );

2023年9月12日星期二

不知道該怎麼流淚了,只是很自然的延續著平時的習慣,停下來的時候,思緒才漸漸恢復到自己身上。有種疼痛,痛到深處,失去知覺感覺像沒有了一樣,於是便不再疼痛。告訴自己,這早已是當初預料到的終點,在兩年早已接受了這個結局。我應該很開心,很開心,終於解脫了,雖然花了我兩年時間,雖然不管有沒有意義,延續到今天,...

2023年9月19日星期二

他回來了,躺在身邊,為何感覺卻不一樣了。或許,改變的是我,已不在是那個懵懂的女孩,我看到了自己的一切,看清了現實的一切。盡在咫尺,他卻不能屬於我,我們之間的隔閡還會越來越大,始終不能真正快樂的在一起。親吻著,卻還想著他對家人說的一切和他家人對他的期望,對我的否定 其實,我早該明白,不 是一直明白,是...

2023年4月2日 星期二

今日學習到的新的技能點 1 今天總結的只是是對於php陣列的操作,將所有的資料查出之後。通過foreach處理陣列。這是一項長期的挑戰。2 echo其實不是方法,而是語言結構。echo乙個變數時會判斷它是否為字串,若不是,則會強制轉化為字串。3 php的陣列是乙個有序的字典,必須同時滿足兩個需求 1...