From e89fb7b93fd5f1042f05107e51fea85f51499668 Mon Sep 17 00:00:00 2001
From: Nao Pross <naopross@thearcway.org>
Date: Sun, 9 Dec 2018 19:51:20 +0100
Subject: Add vector example documentation

---
 vector/vector.c  | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 vector/vector.md |  16 +++++++--
 vector/vectors.c | 107 -------------------------------------------------------
 3 files changed, 120 insertions(+), 110 deletions(-)
 create mode 100644 vector/vector.c
 delete mode 100644 vector/vectors.c

diff --git a/vector/vector.c b/vector/vector.c
new file mode 100644
index 0000000..c8a5906
--- /dev/null
+++ b/vector/vector.c
@@ -0,0 +1,107 @@
+#include <stddef.h>
+#include <stdio.h>
+
+struct vec3 {
+    double x;
+    double y;
+    double z;
+};
+
+struct vec3 vec3_add(struct vec3 * const v, struct vec3 * const u)
+{
+    struct vec3 result = {0, 0, 0};
+
+    if (v == NULL || u == NULL)
+        return result;
+
+    result.x = v->x + u->x;
+    result.y = v->y + u->y;
+    result.z = v->z + u->z;
+
+    return result;
+}
+
+struct vec3 vec3_mul(struct vec3 * const v, const double scalar)
+{
+    struct vec3 result = {0, 0, 0};
+
+    if (v == NULL)
+        return result;
+
+    result.x = scalar * v->x;
+    result.y = scalar * v->y;
+    result.z = scalar * v->z;
+
+    return result;
+}
+
+struct vec3 vec3_sub(struct vec3 * const v, struct vec3 * const u)
+{
+    struct vec3 result = {0, 0, 0};
+    
+    result = vec3_mul(u, -1.0);
+    result = vec3_add(v, &result);
+
+    return result;
+}
+
+double vec3_dot(struct vec3 * const v, struct vec3 * const u)
+{
+    if (v == NULL || u == NULL)
+        return 0;
+
+    return (v->x * u->x) + (v->y * u->y) + (v->z * u->y);
+}
+
+struct vec3 vec3_cross(struct vec3 * const v, struct vec3 * const u)
+{
+    struct vec3 result = {0, 0, 0};
+
+    result.x = (v->y * u->z) - (v->z * u->y);
+    result.y = (v->z * u->x) - (v->x * u->z);
+    result.z = (v->x * u->y) - (v->y * u->x);
+
+    return result;
+}
+
+void vec3_print(struct vec3 * const v)
+{
+    if (v == NULL)
+        return;
+
+    printf("<%.2f,%.2f,%.2f>\n", v->x, v->y, v->y);
+}
+
+
+int main(int argc, char *argv[])
+{
+    struct vec3 a = {1, 2, 3};
+    struct vec3 b = {4, 5, 6};
+    struct vec3 res;
+
+    printf("a = ");
+    vec3_print(&a);
+    printf("b = ");
+    vec3_print(&b);
+
+    printf("sum a + b     : ");
+    res = vec3_add(&a, &b);
+    vec3_print(&res);
+
+    printf("sub a - b     : ");
+    res = vec3_sub(&a, &b);
+    vec3_print(&res);
+
+    printf("product 3*a   : ");
+    res = vec3_mul(&a, 3);
+    vec3_print(&res);
+
+    printf("dot product   : ");
+    printf("%.2f\n", vec3_dot(&a, &b));
+
+    printf("cross product : ");
+    res = vec3_cross(&a, &b);
+    vec3_print(&res);
+
+    return 0;
+}
diff --git a/vector/vector.md b/vector/vector.md
index c7c1b11..abbc0f9 100644
--- a/vector/vector.md
+++ b/vector/vector.md
@@ -4,12 +4,11 @@ date: 9 Dicembre 2018
 author:
     - Naoki Pross
 papersize: a4
-fontfamily: cmbright
 ---
 
 # Premessa
 Si da per assunto che si ha delle conscenze di C di funzioni, strutture dati e
-puntatori e si vuole imparare il C++.
+puntatori e si vuole imparare il C++11.
 
 L'obiettivo è di ottenere una libreria di vettori matematici con le operazioni
 vettoriali di somma, sottrazione, prodotto con scalare, scalare e vettoriale.
@@ -19,4 +18,15 @@ Sarà inoltre utilizzata la terminologia inglese di *dot product* per il
 prodotto scalare e *cross product* per il prodotto vettoriale.
 
 # Un implementazione in C
-Per introd
+Per introdurre il concetto, a seguire vi è un esempio di un implementazione
+semplice in C.
+```{.C include=vector.c startLine=1 endLine=73}
+```
+Per alcune applicazioni ciò è assolutamente sufficiente, ma osserviamo alcune
+limitazioni:
+
+- `vec3` contiene solo informazioni di tipo `double`
+- Si possono creare dei `vec3` non inzializzati
+- La notazione delle operazioni è scomoda. 
+  Per esempio $\vec{v} \cdot 3 \cdot \vec{u}$ diventa 
+  `vec3_dot(&v, &vec3_mul(&u, 3));`
diff --git a/vector/vectors.c b/vector/vectors.c
deleted file mode 100644
index c8a5906..0000000
--- a/vector/vectors.c
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <stddef.h>
-#include <stdio.h>
-
-struct vec3 {
-    double x;
-    double y;
-    double z;
-};
-
-struct vec3 vec3_add(struct vec3 * const v, struct vec3 * const u)
-{
-    struct vec3 result = {0, 0, 0};
-
-    if (v == NULL || u == NULL)
-        return result;
-
-    result.x = v->x + u->x;
-    result.y = v->y + u->y;
-    result.z = v->z + u->z;
-
-    return result;
-}
-
-struct vec3 vec3_mul(struct vec3 * const v, const double scalar)
-{
-    struct vec3 result = {0, 0, 0};
-
-    if (v == NULL)
-        return result;
-
-    result.x = scalar * v->x;
-    result.y = scalar * v->y;
-    result.z = scalar * v->z;
-
-    return result;
-}
-
-struct vec3 vec3_sub(struct vec3 * const v, struct vec3 * const u)
-{
-    struct vec3 result = {0, 0, 0};
-    
-    result = vec3_mul(u, -1.0);
-    result = vec3_add(v, &result);
-
-    return result;
-}
-
-double vec3_dot(struct vec3 * const v, struct vec3 * const u)
-{
-    if (v == NULL || u == NULL)
-        return 0;
-
-    return (v->x * u->x) + (v->y * u->y) + (v->z * u->y);
-}
-
-struct vec3 vec3_cross(struct vec3 * const v, struct vec3 * const u)
-{
-    struct vec3 result = {0, 0, 0};
-
-    result.x = (v->y * u->z) - (v->z * u->y);
-    result.y = (v->z * u->x) - (v->x * u->z);
-    result.z = (v->x * u->y) - (v->y * u->x);
-
-    return result;
-}
-
-void vec3_print(struct vec3 * const v)
-{
-    if (v == NULL)
-        return;
-
-    printf("<%.2f,%.2f,%.2f>\n", v->x, v->y, v->y);
-}
-
-
-int main(int argc, char *argv[])
-{
-    struct vec3 a = {1, 2, 3};
-    struct vec3 b = {4, 5, 6};
-    struct vec3 res;
-
-    printf("a = ");
-    vec3_print(&a);
-    printf("b = ");
-    vec3_print(&b);
-
-    printf("sum a + b     : ");
-    res = vec3_add(&a, &b);
-    vec3_print(&res);
-
-    printf("sub a - b     : ");
-    res = vec3_sub(&a, &b);
-    vec3_print(&res);
-
-    printf("product 3*a   : ");
-    res = vec3_mul(&a, 3);
-    vec3_print(&res);
-
-    printf("dot product   : ");
-    printf("%.2f\n", vec3_dot(&a, &b));
-
-    printf("cross product : ");
-    res = vec3_cross(&a, &b);
-    vec3_print(&res);
-
-    return 0;
-}
-- 
cgit v1.2.1