c-uebungen/Assignment_023/solution/vector_stack.h

131 lines
3.5 KiB
C

#ifndef VECTOR_STACK_H
#define VECTOR_STACK_H
/**
* Struktur zur Darstellung eines dreidimensionalen Vektors.
*/
typedef struct Vector {
double x;
double y;
double z;
} Vector;
typedef int bool;
/**
* Befüllt einen Vektor mit den angegebenen Elementen.
*
* @param result (out) Vektor, der befüllt werden soll
* @param x die x-Komponente des Vektors
* @param y die y-Komponente des Vektors
* @param z die z-Komponente des Vektors
*/
void vec_init(Vector* result, double x, double y, double z);
/**
* Befüllt einen Vektor mit dem Wert 0 für alle Komponenten und erzeugt
* so den Nullvektor.
*
* @param result (out) Vektor, der befüllt werden soll
*/
void vec_null(Vector* result);
/**
* Skalarmultiplikation: Multiplikation des Vektors mit einem Skalar.
*
* @param result (out) Vektor, der befüllt werden soll
* @param v Vektor, der mit dem Skalar multipliziert werden soll
* @param scalar Skalar mit dem multipliziert werden soll
*/
void vec_mul_scalar(Vector* result, Vector v, double scalar);
/**
* Multiplikation des Vektors mit einem Vektor.
*
* @param result (out) Vektor für das Ergebnis
* @param first Vektor, der mit dem anderen multipliziert werden soll
* @param second Vektor, der mit dem anderen multipliziert werden soll
*/
double vec_mul_dot(Vector first, Vector second);
/**
* Bestimmt das Kreuzprodukt der beiden Vektoren.
*
* @param result (out) Vektor für das Ergebnis
* @param first Vektor, der mit dem anderen multipliziert werden soll
* @param second Vektor, der mit dem anderen multipliziert werden soll
*/
void vec_mul_cross(Vector* result, Vector first, Vector second);
/**
* Addiert zwei Vektoren.
*
* @param result (out) Vektor für das Ergebnis
* @param first Vektor, der mit dem anderen addiert werden soll
* @param second Vektor, der mit dem anderen addiert werden soll
*/
void vec_add(Vector* result, Vector first, Vector second);
/**
* Subtrahiert zwei Vektoren.
*
* @param result (out) Vektor für das Ergebnis
* @param first Vektor, von dem subtrahiert wird
* @param second Vektor, der subtrahiert wird
*/
void vec_sub(Vector* result, Vector first, Vector second);
/**
* Vergleicht zwei Vektoren auf Gleichheit der Komponenten.
*
* @param first Vektor, der verglichen werden soll
* @param second Vektor, der verglichen werden soll
* @return TRUE wenn die Vektoren gleich sind, sonst FALSE
*/
bool vec_equals(Vector first, Vector second);
/**
* Wandelt den gegebenen Vektor in eine String um und alloziert den
* dafür nötigen Speicher.
*
* Verwender müssen den Speicher mit free wieder freigeben.
*
* @param v Vektor, der umgewandelt werden soll
* @return String-Repräsentation des Vektors
*/
char* vec_to_str(Vector v);
/**
* Gibt den Vektor aus.
*
* @param v Vektor, der ausgegeben werden soll
*/
void vec_print(Vector v);
/**
* Bestimmt die Lönge des Vektors.
*
* @param v Vektor, dessen Länge bestimmt werden soll.
* @return die Länge des Vektors
*/
double vec_length(Vector v);
/**
* Bestimmt den Einheitsvektor zum gegeben Vektor.
*
* @param result (out) Vektor für das Ergebnis
* @param v Vektor, für den die Norm bestimmt werden soll
* @return 0 bei Erfolg, -1 im Fehlerfall
*/
int vec_norm(Vector* result, Vector v);
/**
* Testet, ob die beiden Vektoren kollinear sind.
*
* @param first Vektor, der verglichen werden soll
* @param second Vektor, der verglichen werden soll
* @return TRUE wenn die Vektoren kollinear sind, sonst FALSE
*/
bool vec_collinear(Vector first, Vector second);
#endif /* VECTOR_STACK_H */