-
Notifications
You must be signed in to change notification settings - Fork 0
/
bresenham_line.c
79 lines (73 loc) · 1.96 KB
/
bresenham_line.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
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* bresenham_line.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: kprytkov <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2018/05/22 13:47:34 by kprytkov #+# #+# */
/* Updated: 2018/05/22 13:47:36 by kprytkov ### ########.fr */
/* */
/* ************************************************************************** */
#include "./includes/fdf.h"
static void ft_draw_dx(t_env *e)
{
int error;
int i;
int x;
int y;
error = (e->dy << 1) - e->dx;
x = e->x0 + e->step_x;
y = e->y0;
i = 1;
mlx_pixel_put(e->mlx, e->win, e->x0, e->y0, e->line_color);
while (i <= e->dx)
{
if (error > 0)
{
y += e->step_y;
error += (e->dy - e->dx) << 1;
}
else
error += e->dy << 1;
mlx_pixel_put(e->mlx, e->win, x, y, e->line_color);
x += e->step_x;
i++;
}
}
static void ft_draw_dy(t_env *e)
{
int error;
int i;
int x;
int y;
error = (e->dx << 1) - e->dy;
y = e->y0 + e->step_y;
x = e->x0;
i = 1;
mlx_pixel_put(e->mlx, e->win, e->x0, e->y0, e->line_color);
while (i <= e->dy)
{
if (error > 0)
{
error += (e->dx - e->dy) << 1;
x += e->step_x;
}
else
error += e->dx << 1;
mlx_pixel_put(e->mlx, e->win, x, y, e->line_color);
y += e->step_y;
i++;
}
}
void bresenham_line(t_env *e)
{
e->dx = abs(e->x1 - e->x0);
e->dy = abs(e->y1 - e->y0);
e->step_x = e->x1 >= e->x0 ? 1 : -1;
e->step_y = e->y1 >= e->y0 ? 1 : -1;
if (e->dx > e->dy)
ft_draw_dx(e);
else
ft_draw_dy(e);
}