forked from edrosten/libcvd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
brezenham.cc
114 lines (101 loc) · 1.69 KB
/
brezenham.cc
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
#include <cvd/brezenham.h>
#include <math.h>
using namespace TooN;
namespace CVD {
Brezenham::Brezenham(Vector<2> dir){
if(fabs(dir[0]) > fabs(dir[1])){
step1.y=0;
if(dir[0] > 0){
step1.x=1;
val2=dir[0];
} else {
step1.x=-1;
val2=-dir[0];
}
step2.x=0;
if(dir[1] > 0){
step2.y =1;
val1=dir[1];
} else {
step2.y=-1;
val1=-dir[1];
}
} else {
step1.x=0;
if(dir[1] > 0){
step1.y=1;
val2=dir[1];
} else {
step1.y=-1;
val2=-dir[1];
}
step2.y=0;
if(dir[0] > 0){
step2.x =1;
val1=dir[0];
} else {
step2.x=-1;
val1=-dir[0];
}
}
residual = val2/2;
}
ImageRef Brezenham::step(){
if (residual >= val2){
residual -= val2;
return step2;
}
residual += val1;
return step1;
}
Brezenham8::Brezenham8(Vector<2> dir){
if(fabs(dir[0]) > fabs(dir[1])){
step1.y=0;
if(dir[0] > 0){
step1.x=1;
val2=dir[0];
} else {
step1.x=-1;
val2=-dir[0];
}
step2.x=step1.x;
if(dir[1] > 0){
step2.y =1;
val1=dir[1];
} else {
step2.y=-1;
val1=-dir[1];
}
my_sideways.x=0;
my_sideways.y=1;
} else {
step1.x=0;
if(dir[1] > 0){
step1.y=1;
val2=dir[1];
} else {
step1.y=-1;
val2=-dir[1];
}
step2.y=step1.y;
if(dir[0] > 0){
step2.x =1;
val1=dir[0];
} else {
step2.x=-1;
val1=-dir[0];
}
my_sideways.x=1;
my_sideways.y=0;
}
residual = val2/2;
}
ImageRef Brezenham8::step(){
residual += val1;
if (residual >= val2){
residual -= val2;
return step2;
}
return step1;
}
} // namespace CVD