cvectorstructdot-productcross-product

Dot Product and Cross Product in C using structures


  • I have to create a struct vector3d that includes x,y, and z
  • Then I have to create two variables of the type struct vector 3d and store two vectors in them
  • Next, I have to write a function that calculates the dot and cross product of these two vectors. Which return type is necessary?

That's what I have until now. Maybe someone could help me.

#include <stdio.h>
#include <stdlib.h>

int n = 3;

struct vector3d
{
    int x, y, z;
};

int dot_product (int v1[], int v2[], int n)
{
    int dproduct = 0;
    n = 3;
    
    for(int i = 0; i < n; i++)
        dproduct += v1[i] * v2[i];
    return dproduct;
}

void cross_product (int v1[], int v2[], int crossproduct[])
{
    crossproduct[0] = v1[1] * v2[2] - v1[2] * v2[1];
    crossproduct[1] = v1[0] * v2[2] - v1[2] * v2[0];
    crossproduct[2] = v1[0] * v2[1] - v1[1] * v2[0];
}

int main()
{
    struct vector3d v1 = {0,0,0};
    struct vector3d v2 = {0,0,0};
    
    printf("Vector 1 - Enter value for x: ");
    scanf("%d", &v1.x);
    printf("Vector 1 - Enter value for y: ");
    scanf("%d", &v1.y);
    printf("Vector 1 - Enter value for z: ");
    scanf("%d", &v1.z);
    
    printf("Vector 2 - Enter value for x: ");
    scanf("%d", &v2.x);
    printf("Vector 2 - Enter value for y: ");
    scanf("%d", &v2.y);
    printf("Vector 2 - Enter value for z: ");
    scanf("%d", &v2.z);
}

Solution

  • You can't use int[] in the place of vector3d. You can pass your vector struct and use it to perform your tasks. I have written this code, you can modify it with your needs.

    #include <stdio.h>
    #include <stdlib.h>
    
    int n = 3;
    
    typedef struct vector3d
    {
        int x, y, z;
    } vector3d;
    
    int dot_product(vector3d v1, vector3d v2)
    {
        int dproduct = 0;
    
        dproduct += v1.x * v2.x;
        dproduct += v1.y * v2.y;
        dproduct += v1.z * v2.z;
        return dproduct;
    }
    
    vector3d cross_product(vector3d v1, vector3d v2)
    {
        vector3d crossproduct = {0, 0, 0};
        crossproduct.x = v1.y * v2.z - v1.z * v2.y;
        crossproduct.y = v1.x * v2.z - v1.z * v2.x;
        crossproduct.z = v1.x * v2.y - v1.y * v2.x;
        return crossproduct;
    }
    
    int main()
    {
        vector3d v1 = {0, 0, 0};
        vector3d v2 = {0, 0, 0};
    
        printf("Vector 1 - Enter value for x: ");
        scanf("%d", &v1.x);
        printf("Vector 1 - Enter value for y: ");
        scanf("%d", &v1.y);
        printf("Vector 1 - Enter value for z: ");
        scanf("%d", &v1.z);
    
        printf("Vector 2 - Enter value for x: ");
        scanf("%d", &v2.x);
        printf("Vector 2 - Enter value for y: ");
        scanf("%d", &v2.y);
        printf("Vector 2 - Enter value for z: ");
        scanf("%d", &v2.z);
    
        printf("Dotproduct: %d\n", dot_product(v1, v2));
        vector3d cp = cross_product(v1, v2);
        printf("Crossproduct: x:%d y:%d z:%d", cp.x, cp.y, cp.z);
    
        return 0;
    }
    
    //OUTPUT
    Vector 1 - Enter value for x: 1
    Vector 1 - Enter value for y: 2
    Vector 1 - Enter value for z: 3
    Vector 2 - Enter value for x: 3
    Vector 2 - Enter value for y: 2
    Vector 2 - Enter value for z: 1
    Dotproduct: 10
    Crossproduct: x:-4 y:-8 z:-4 
    

    In the future try to think of these small things by your self.