首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言實現三維向量叉乘運算完整指南

     編輯:關於C

在三維圖形編程、物理模擬與遊戲開發中,向量叉乘是核心運算之一。本文提供一個完整、可編譯的 C 語言實現,包含主程式、函式實現與標頭檔,並附上數學公式說明,方便直接整合到專案中。

程式碼結構

專案包含三個檔案:

  • main.c:測試主程式
  • vector_multiply.c:叉乘核心演算法
  • vector_multiply.h:函式宣告與防重複包含

main.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;
}

vector_multiply.h - 標頭檔

#ifndef VECTOR_MULTIPLY_H_
#define VECTOR_MULTIPLY_H_

void vector_multiply(float a[], float b[], float c[]);

#endif /* VECTOR_MULTIPLY_H_ */

vector_multiply.c - 核心實現

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

手算驗證:

  • x 分量:2×9 - 8×3 = 18 - 24 = -6 ✓
  • y 分量:3×7 - 9×1 = 21 - 9 = 12 ✓
  • z 分量:1×8 - 7×2 = 8 - 14 = -6 ✓

改進建議

  • 可將係數矩陣 d 定義為 static const 避免重複初始化
  • 增加參數合法性檢查(非空指標、陣列長度)
  • 考慮使用 struct Vec3 封裝提升可讀性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved