示例#1
0
/*
on factor;
off period;

procedure winding(x1, y1, x2, y2, x3, y3);
BEGIN scalar dx1, dy1, dx2, dy2, det;
	dx1 := x1-x2; dy1 := y1-y2;
	dx2 := x3-x2; dy2 := y3-y2;
	det := dx1*dy2 - dy1*dx2;
	return det;
END;

w1 := winding(ax, ay, bx, by, cx, cy);
w2 := winding(ax, ay, bx, by, dx, dy);
w3 := winding(cx, cy, dx, dy, ax, ay);
w4 := winding(cx, cy, dx, dy, bx, by);

comment: dxab1 := ax-bx;
comment: sub(dxab1=dxab, w1);

let ax-bx = dxab;
let ay-by = dyab;
let bx-cx = dxbc;
let by-cy = dybc;
let cx-dx = dxcd;
let cy-dy = dycd;
let dx-ax = dxda;
let dy-ay = dyda;
*/
static __forceinline int isect_line(int ax, int ay, int bx, int by, int cx, int cy, int dx, int dy) {
	int w1 = winding(ax, ay, bx, by, cx, cy);
	int w2 = winding(ax, ay, bx, by, dx, dy);

	if (w1 == w2) 
		return 0;

	int w3 = winding(cx, cy, dx, dy, ax, ay);
	int w4 = winding(cx, cy, dx, dy, bx, by);

	if (w3 == w4) 
		return 0;

	return 1;
}
示例#2
0
 double winding_abs(bool do_trim=1) const { return winding(do_trim, true); }