summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/colors.h34
-rw-r--r--lib/potts.h22
-rw-r--r--lib/symmetric.h5
3 files changed, 47 insertions, 14 deletions
diff --git a/lib/colors.h b/lib/colors.h
new file mode 100644
index 0000000..04d39a8
--- /dev/null
+++ b/lib/colors.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "types.h"
+
+double hue_to_R(double theta) {
+ if (((M_PI / 3 <= theta) && (theta < 2 * M_PI / 3)) || ((4 * M_PI / 3 <= theta) && (theta < 5 * M_PI / 3))) {
+ return 1.0 - fabs(fmod(theta / (2 * M_PI / 6), 2) - 1.0);
+ } else if (((0 <= theta) && (theta < M_PI / 3)) || ((5 * M_PI / 3 <= theta) && (theta <= 2 * M_PI))) {
+ return 1.0;
+ } else {
+ return 0.0;
+ }
+}
+
+double hue_to_G(double theta) {
+ if (((0 <= theta) && (theta < M_PI / 3)) || ((M_PI <= theta) && (theta < 4 * M_PI / 3))) {
+ return 1.0 - fabs(fmod(theta / (2 * M_PI / 6), 2) - 1.0);
+ } else if (((M_PI / 3 <= theta) && (theta < 2 * M_PI / 3)) || ((2 * M_PI / 3 <= theta) && (theta < M_PI))) {
+ return 1.0;
+ } else {
+ return 0.0;
+ }
+}
+
+double hue_to_B(double theta) {
+ if (((2 * M_PI / 3 <= theta) && (theta < M_PI)) || ((5 * M_PI / 3 <= theta) && (theta <= 2 * M_PI))) {
+ return 1.0 - fabs(fmod(theta / (2 * M_PI / 6), 2) - 1.0);
+ } else if (((M_PI <= theta) && (theta < 4 * M_PI / 3)) || ((4 * M_PI / 3 <= theta) && (theta < 5 * M_PI / 3))) {
+ return 1.0;
+ } else {
+ return 0.0;
+ }
+}
+
diff --git a/lib/potts.h b/lib/potts.h
index e7f0899..e411ddb 100644
--- a/lib/potts.h
+++ b/lib/potts.h
@@ -44,13 +44,11 @@ void free_spin(potts_t <q> s) {
// do nothing!
}
-template <q_t q>
-void free_spin(typename potts_t<q>::M_t s) {
+void free_spin(int *s) {
free(s);
}
-template <q_t q>
-void free_spin(typename potts_t<q>::F_t s) {
+void free_spin(double *s) {
free(s);
}
@@ -60,13 +58,13 @@ potts_t <q> copy(potts_t <q> s) {
}
template <q_t q>
-void add(typename potts_t<q>::M_t s1, int a, potts_t <q> s2) {
- s1[s2.x] += a;
+void add(typename potts_t<q>::M_t *s1, int a, potts_t <q> s2) {
+ (*s1)[s2.x] += a;
}
template <q_t q>
-void add(typename potts_t<q>::F_t s1, double a, potts_t <q> s2) {
- s1[s2.x] += a;
+void add(typename potts_t<q>::F_t *s1, double a, potts_t <q> s2) {
+ (*s1)[s2.x] += a;
}
template <q_t q>
@@ -78,13 +76,13 @@ typename potts_t<q>::M_t scalar_multiple(int factor, potts_t <q> s) {
template <q_t q>
typename potts_t<q>::F_t scalar_multiple(double factor, potts_t <q> s) {
- int *F = (double *)calloc(q, sizeof(double));
- M[s.x] += factor;
- return M;
+ double *F = (double *)calloc(q, sizeof(double));
+ F[s.x] += factor;
+ return F;
}
template <q_t q>
-double norm_squared(typename potts<q>::F_t s) {
+double norm_squared(typename potts_t<q>::F_t s) {
double total = 0;
for (q_t i = 0; i < q; i++) {
total += pow(s[i], 2);
diff --git a/lib/symmetric.h b/lib/symmetric.h
index 0b292a6..a73b403 100644
--- a/lib/symmetric.h
+++ b/lib/symmetric.h
@@ -6,6 +6,7 @@
#include "types.h"
#ifdef __cplusplus
+#include "potts.h"
extern "C" {
#endif
@@ -39,11 +40,11 @@ void init(symmetric_t<q> *p) {
template <q_t q>
void free_spin(symmetric_t<q> p) {
- free(p->perm);
+ free(p.perm);
}
template <q_t q>
-symmetric_t<q_t> copy(symmetric_t<q_t> x) {
+symmetric_t<q> copy(symmetric_t<q> x) {
symmetric_t<q> x2;
x2.perm = (q_t *)malloc(q * sizeof(q_t));