#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 */