-
Notifications
You must be signed in to change notification settings - Fork 0
/
Grid.c
116 lines (106 loc) · 2.32 KB
/
Grid.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "iso.h"
/**
* ToIso - converts the 3d points given in a grid to 2d
* @my_grid: gird to be used
* @altitude: Z coordinates to be used
*
* Return: void
*/
void ToIso(float ***my_grid, int **altitude)
{
float *temp;
int Z, i, j;
for (i = 0; i <= GRID_SIZE; i++)
{
for (j = 0; j <= GRID_SIZE; j++)
{
temp = my_grid[i][j];
my_grid[i][j][0] = (temp[0] * INC) - (temp[1] * INC);
Z = altitude[i][j];
my_grid[i][j][1] = ((1 - INC) * temp[0]) + ((1 - INC) * temp[1]) - Z;
}
}
}
/**
* get_grid - generates a set of points given an initial point
* @origin: initial point
*
* Return: a 3d array containing the generated points
*/
float ***get_grid(float *origin)
{
int i, j;
float ***my_grid = NULL;
my_grid = malloc(sizeof(*my_grid) * (GRID_SIZE + 1));
for (i = 0; i <= GRID_SIZE; i++)
{
my_grid[i] = malloc(sizeof(**my_grid) * (GRID_SIZE + 1));
for (j = 0; j <= GRID_SIZE; j++)
my_grid[i][j] = malloc(sizeof(***my_grid) * 2);
}
for (i = 0; i <= GRID_SIZE; i++)
{
for (j = 0; j <= GRID_SIZE; j++)
{
my_grid[i][j][0] = origin[0] + (j * GRID_SPACING);
my_grid[i][j][1] = origin[1] + (i * GRID_SPACING);
}
}
return (my_grid);
}
/**
* get_altitude - scans a file to Z coordinates
* @altitude_file: file stream to be used
*
* Return: a 2d array containing the read coordinates
*/
int **get_altitude(FILE *altitude_file)
{
int **grid = NULL;
int i, j;
char line[256];
char *token = NULL;
grid = malloc(sizeof(*grid) * (GRID_SIZE + 1));
for (i = 0; i <= GRID_SIZE; i++)
{
grid[i] = malloc(sizeof(**grid) * (GRID_SIZE + 1));
}
i = 0;
while (fgets(line, sizeof(line), altitude_file))
{
j = 0;
token = strtok(line, " ");
while (token != NULL)
{
grid[i][j] = atoi(token);
token = strtok(NULL, " ");
j++;
}
i++;
}
fclose(altitude_file);
return (grid);
}
/**
* apply_rotation - applies rotation to given points
* @my_grid: gird to be used
* @angle: angle to be used
*
* Return: void
*/
void apply_rotation(float ***my_grid, double angle)
{
float *temp;
double radians;
int i, j;
for (i = 0; i <= GRID_SIZE; i++)
{
for (j = 0; j <= GRID_SIZE; j++)
{
temp = my_grid[i][j];
radians = (angle * M_PI) / 180;
my_grid[i][j][0] = temp[0] * cos(radians) - temp[1] * sin(radians);
my_grid[i][j][1] = temp[0] * sin(radians) + temp[1] * cos(radians);
}
}
}