aboutsummaryrefslogtreecommitdiff
path: root/engines/mortevielle/droite.cpp
blob: 8d254a4afc870d4d18470b832c1d80a047a4f70b (plain)
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
void droite(integer x, integer y, integer xx, integer yy, integer coul) {
	integer step, i;
	real a, b;
	real xr, yr, xro, yro;

	xr = x;
	yr = y;
	xro = xx;
	yro = yy;
	/*writeln(le_file,'(',x:4,',',y:4,') ==> (',xx:4,',',yy:4,')');*/
	if (abs(y - yy) > abs(x - xx)) {
		a = (real)((x - xx)) / (y - yy);
		b = (yr * xro - yro * xr) / (y - yy);
		i = y;
		if (y > yy)  step = -1;
		else step = 1;
		do {
			putpix(gd, trunc(a * i + b), i, coul);
			i = i + step;
		} while (!(i == yy));
		/*writeln(le_file,'X == ',a:3:3,' * Y + ',b:3:3);*/
	} else {
		a = (real)((y - yy)) / (x - xx);
		b = ((yro * xr) - (yr * xro)) / (x - xx);
		i = x;
		if (x > xx)  step = -1;
		else step = 1;
		do {
			putpix(gd, i, trunc(a * i + b), coul);
			i = i + step;
		} while (!(i == xx));
		/*writeln(le_file,'Y == ',a:3:3,' * X + ',b:3:3);*/
	}
}