1
  • 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);
}
My Zy
  • 23
  • 3
  • Your functions operate on arrays of `int`, but you want them to operate on your `vector3d` struct. – M Oehm Dec 16 '20 at 14:03

2 Answers2

0

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.

crackaf
  • 492
  • 2
  • 11
0

You create an alias of your struct using typedef and use the struct in the vector analysis functions (Passing struct to function). To access the fields of the struct use the . notation. There is another possiblitiy to pass structs to functions as a pointer to the struct, in this case you use the -> notation to access the fields (Passing pointers/references to structs into functions, https://www.tutorialspoint.com/cprogramming/c_structures.htm)

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

int dot_product (vector3d v1, vector3d v2)
{
   return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}

In this link instead of 3D vectors complex numbers ('2D vectors' approximately) are used, you can adapt this : https://www.programiz.com/c-programming/c-structure-function

ralf htp
  • 9,149
  • 4
  • 22
  • 34