在三維圖形編程、物理模擬與遊戲開發中,向量叉乘是核心運算之一。本文提供一個完整、可編譯的 C 語言實現,包含主程式、函式實現與標頭檔,並附上數學公式說明,方便直接整合到專案中。
專案包含三個檔案:
#include <stdio.h>
#include "vector_multiply.h"
int main(void)
{
float a[3] = {1.0, 2.0, 3.0};
float b[3] = {7.0, 8.0, 9.0};
float c[3] = {0};
vector_multiply(a, b, c);
printf("%.1f:%.1f:%.1f\n", c[0], c[1], c[2]);
return 0;
}
#ifndef VECTOR_MULTIPLY_H_
#define VECTOR_MULTIPLY_H_
void vector_multiply(float a[], float b[], float c[]);
#endif /* VECTOR_MULTIPLY_H_ */
void vector_multiply(float a[], float b[], float c[])
{
int i, j, k, n = 0;
/* 根據公式預設的係數矩陣 */
int d[3][4] = { { 0, 1, -1, 0 },
{ 0, -1, 1, 0 },
{ 0, 1, -1, 0 } };
for (k = 0; k < 3; k++) {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
if (k != i && k != j)
c[k] += a[i] * b[j] * d[k][n++];
}
n = 0;
}
return;
}
gcc main.c vector_multiply.c -o VectorOperations
./VectorOperations
給定兩個三維向量:
u = (u₁, u₂, u₃)
v = (v₁, v₂, v₃)
叉乘定義為行列式:
u × v = | i j k |
| u₁ u₂ u₃ |
| v₁ v₂ v₃ |
展開後得到:
u × v = (u₂v₃ - v₂u₃, u₃v₁ - v₃u₁, u₁v₂ - v₂u₁)
輸入向量 a=(1,2,3)、b=(7,8,9),執行結果為:
-6.0:12.0:-6.0
手算驗證:
d 定義為 static const 避免重複初始化struct Vec3 封裝提升可讀性