144 lines
3.8 KiB
C
144 lines
3.8 KiB
C
|
#ifndef VECTOR_HEAP_H
|
||
|
#define VECTOR_HEAP_H
|
||
|
|
||
|
/**
|
||
|
* Struktur zur Darstellung eines dreidimensionalen Vektors.
|
||
|
*/
|
||
|
typedef struct {
|
||
|
double x;
|
||
|
double y;
|
||
|
double z;
|
||
|
} Vector;
|
||
|
|
||
|
/**
|
||
|
* Erzeugt einen neuen Vektor mit den angegebenen Elementen.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param x die x-Komponente des Vektors
|
||
|
* @param y die y-Komponente des Vektors
|
||
|
* @param z die z-Komponente des Vektors
|
||
|
* @return der erzeugte Vektor
|
||
|
*/
|
||
|
Vector* vec_new(double x, double y, double z);
|
||
|
|
||
|
/**
|
||
|
* Erzeugt einen Vektor mit dem Wert 0 für alle Komponenten und erzeugt
|
||
|
* so den Nullvektor.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @return der erzeugte Vektor
|
||
|
*/
|
||
|
Vector* vec_new_null();
|
||
|
|
||
|
/**
|
||
|
* Skalarmultiplikation: Multiplikation des Vektors mit einem Skalar.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param v Vektor, der mit dem Skalar multipliziert werden soll
|
||
|
* @param scalar Skalar mit dem multipliziert werden soll
|
||
|
* @return das Ergebnis der Skalarmultiplikation
|
||
|
*/
|
||
|
Vector* vec_mul_scalar(Vector* v, double scalar);
|
||
|
|
||
|
/**
|
||
|
* Multiplikation des Vektors mit einem Vektor.
|
||
|
*
|
||
|
* @param first Vektor, der mit dem anderen multipliziert werden soll
|
||
|
* @param second Vektor, der mit dem anderen multipliziert werden soll
|
||
|
* @return das Ergebnis der Multiplikation
|
||
|
*/
|
||
|
double vec_mul_dot(Vector* first, Vector *second);
|
||
|
|
||
|
/**
|
||
|
* Bestimmt das Kreuzprodukt der beiden Vektoren.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param first Vektor, der mit dem anderen multipliziert werden soll
|
||
|
* @param second Vektor, der mit dem anderen multipliziert werden soll
|
||
|
* @return das Ergebnis der Multiplikation
|
||
|
*/
|
||
|
Vector* vec_mul_cross(Vector* first, Vector *second);
|
||
|
|
||
|
/**
|
||
|
* Addiert zwei Vektoren.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param first Vektor, der mit dem anderen addiert werden soll
|
||
|
* @param second Vektor, der mit dem anderen addiert werden soll
|
||
|
* @return das Ergebnis der Addition
|
||
|
*/
|
||
|
Vector* vec_add(Vector* first, Vector *second);
|
||
|
|
||
|
/**
|
||
|
* Subtrahiert zwei Vektoren.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param first Vektor, von dem subtrahiert wird
|
||
|
* @param second Vektor, der subtrahiert wird
|
||
|
* @return das Ergebnis der Subtraktion
|
||
|
*/
|
||
|
Vector* vec_sub(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
|
||
|
*/
|
||
|
int 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.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param v Vektor, für den die Norm bestimmt werden soll
|
||
|
* @return den Einheitsvektor, oder NULL im Fehlerfall (v hat die Länge 0)
|
||
|
*/
|
||
|
Vector* vec_norm(Vector* v);
|
||
|
|
||
|
/**
|
||
|
* Testet, ob die beiden Vektoren kollinear sind.
|
||
|
*
|
||
|
* Verwender müssen den Speicher mit free wieder freigeben.
|
||
|
*
|
||
|
* @param first Vektor, der verglichen werden soll
|
||
|
* @param second Vektor, der verglichen werden soll
|
||
|
* @return TRUE wenn die Vektoren kollinear sind, sonst FALSE
|
||
|
*/
|
||
|
int vec_collinear(Vector* first, Vector* second);
|
||
|
|
||
|
#endif /* VECTOR_HEAP_H */
|