levelz-c 0.1.0
Loading...
Searching...
No Matches
coordinate.h
1#ifndef LEVELZ_COORDINATE_H
2#define LEVELZ_COORDINATE_H
3
4#include <stdio.h>
5#include <stdlib.h>
6#include <tgmath.h>
7
11typedef struct Coordinate2D {
15 double x;
16
20 double y;
22
29Coordinate2D* createCoordinate2D(double x, double y) {
30 Coordinate2D* c = (Coordinate2D*) malloc(sizeof(Coordinate2D));
31 c->x = x;
32 c->y = y;
33 return c;
34}
35
42double Coordinate2D_distance(Coordinate2D* a, Coordinate2D* b) {
43 return sqrt(pow(a->x - b->x, 2) + pow(a->y - b->y, 2));
44}
45
51double Coordinate2D_magnitude(Coordinate2D* a) {
52 return sqrt(pow(a->x, 2) + pow(a->y, 2));
53}
54
61Coordinate2D* Coordinate2D_add(Coordinate2D* a, Coordinate2D* b) {
62 return createCoordinate2D(a->x + b->x, a->y + b->y);
63}
64
71Coordinate2D* Coordinate2D_subtract(Coordinate2D* a, Coordinate2D* b) {
72 return createCoordinate2D(a->x - b->x, a->y - b->y);
73}
74
80char* Coordinate2D_toString(Coordinate2D* c) {
81 char* str = (char*) malloc(20);
82 sprintf(str, "[%g, %g]", c->x, c->y);
83 return str;
84}
85
91Coordinate2D* Coordinate2D_fromString(const char* str) {
92 char* str0 = (char*) malloc(strlen(str) + 1);
93 strcpy(str0, str);
94
95 char* x0 = strtok(str0, "[], \t");
96 double x = atof(x0);
97
98 char* y0 = strtok(0, "[], \t");
99 double y = atof(y0);
100
101 free(str0);
102 return createCoordinate2D(x, y);
103}
104
108typedef struct Coordinate3D {
112 double x;
113
117 double y;
118
122 double z;
124
132Coordinate3D* createCoordinate3D(double x, double y, double z) {
133 Coordinate3D* c = (Coordinate3D*) malloc(sizeof(Coordinate3D));
134 c->x = x;
135 c->y = y;
136 c->z = z;
137 return c;
138}
139
146double Coordinate3D_distance(Coordinate3D* a, Coordinate3D* b) {
147 return sqrt(pow(a->x - b->x, 2) + pow(a->y - b->y, 2) + pow(a->z - b->z, 2));
148}
149
155double Coordinate3D_magnitude(Coordinate3D* a) {
156 return sqrt(pow(a->x, 2) + pow(a->y, 2) + pow(a->z, 2));
157}
158
165Coordinate3D* Coordinate3D_add(Coordinate3D* a, Coordinate3D* b) {
166 return createCoordinate3D(a->x + b->x, a->y + b->y, a->z + b->z);
167}
168
175Coordinate3D* Coordinate3D_subtract(Coordinate3D* a, Coordinate3D* b) {
176 return createCoordinate3D(a->x - b->x, a->y - b->y, a->z - b->z);
177}
178
184char* Coordinate3D_toString(Coordinate3D* c) {
185 char* str = (char*) malloc(20);
186 sprintf(str, "[%g, %g, %g]", c->x, c->y, c->z);
187 return str;
188}
189
195Coordinate3D* Coordinate3D_fromString(char* str) {
196 char* str0 = (char*) malloc(strlen(str));
197 strcpy(str0, str);
198
199 char* x0 = strtok(str0, "[], \t");
200 double x = atof(x0);
201
202 char* y0 = strtok(0, "[], \t");
203 double y = atof(y0);
204
205 char* z0 = strtok(0, "[], \t");
206 double z = atof(z0);
207
208 free(str0);
209 return createCoordinate3D(x, y, z);
210}
211
212#endif
Definition coordinate.h:11
double y
Definition coordinate.h:20
double x
Definition coordinate.h:15
Definition coordinate.h:108
double x
Definition coordinate.h:112
double z
Definition coordinate.h:122
double y
Definition coordinate.h:117