有关三次元外积的计算

img

需要设计一个计算三次元外积的程序

例:
输入
4
12 68 -49
5649 657 -481
4968 354 -42
-857 574 444
输出
-681954116 1809081590 1481486766

做题不易
有用请采纳

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

typedef struct
{
    long x;
    long y;
    long z;
}Node;
Node V[10];
Node result = { 0 };
int n, b = 1;
Node calc(Node p, Node q, int count)
{
    //(a1,a2,a3)x(b1,b2,b3)=(a2b3-a3b2,a3b1-a1b3,a1b2-a2b1)
    result.x = p.y * q.z - p.z * q.y;
    result.y = p.z * q.x - p.x * q.z;
    result.z = p.x * q.y - p.y * q.x;
    if (count == 2)
        return result;
    else
        return calc(result, V[++b], --count);//递归运算
}
int main()
{
    int i;
    scanf("%d", &n);//向量个数
    for (i = 0;i < n;i++)
    {
        scanf("%d%d%d", &V[i].x, &V[i].y, &V[i].z);
    }
    calc(V[0], V[b],n);//递归运算
    printf("%ld %ld %ld", result.x, result.y, result.z);
    return 0;
}

img

【有帮助请采纳】

#include<stdio.h>
int main(){
    int n;
    long r[10][3];//支持n<=10,若要更多,把10改大即可
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%ld %ld %ld",&r[i][0],&r[i][1],&r[i][2]);//输入数据
    }
    long out[3]={r[0][0],r[0][1],r[0][2]};//初始化h1,h2,h3
    long temp1,temp2,temp3;//临时变量
    for(int k=1;k<n;k++){//利用循环代替递归,简单易懂
        temp1 = (out[1]*r[k][2])-(out[2]*r[k][1]);//计算h1
        temp2 = (out[2]*r[k][0])-(out[0]*r[k][2]);//计算h2
        temp3 = (out[0]*r[k][1])-(out[1]*r[k][0]);//计算h3
        out[0] = temp1;
        out[1] = temp2;
        out[2] = temp3;
    }
    printf("%ld %ld %ld",out[0],out[1],out[2]);
    return 0;
}

img

【有帮助请采纳】