#include <math.h>
#include <glib.h>
#include "scblog.h"
#include "scbutil.h"
Go to the source code of this file.
Defines | |
#define | _GNU_SOURCE |
Functions | |
static int | CCW (const ScbPointPtr p0, const ScbPointPtr p1, const ScbPointPtr p2) |
gboolean | erscribble_is_rect_intersect (const ScbRectPtr r1, const ScbRectPtr r2) |
gboolean | erscribble_is_lines_intersect (const ScbPointPtr p1, const ScbPointPtr p2, const ScbPointPtr p3, const ScbPointPtr p4) |
#define _GNU_SOURCE |
static int CCW | ( | const ScbPointPtr | p0, | |
const ScbPointPtr | p1, | |||
const ScbPointPtr | p2 | |||
) | [static] |
Definition at line 108 of file scbutil.c.
References _ScbPoint::x, and _ScbPoint::y.
Referenced by erscribble_is_lines_intersect().
00109 { 00110 long dx1, dx2 ; 00111 long dy1, dy2 ; 00112 00113 dx1 = p1->x - p0->x ; dx2 = p2->x - p0->x ; 00114 dy1 = p1->y - p0->y ; dy2 = p2->y - p0->y ; 00115 /* This is basically a slope comparison: we don't do divisions because 00116 * of divide by zero possibilities with pure horizontal and pure 00117 * vertical lines. 00118 */ 00119 return ((dx1 * dy2 > dy1 * dx2) ? 1 : -1) ; 00120 }
gboolean erscribble_is_lines_intersect | ( | const ScbPointPtr | p1, | |
const ScbPointPtr | p2, | |||
const ScbPointPtr | p3, | |||
const ScbPointPtr | p4 | |||
) |
Definition at line 84 of file scbutil.c.
References CCW().
Referenced by erscribble_stroke_line_hit_test().
00088 { 00089 gboolean bRet = ((( CCW(p1, p2, p3) * CCW(p1, p2, p4)) <= 0) 00090 && (( CCW(p3, p4, p1) * CCW(p3, p4, p2) <= 0) )) ; 00091 00092 00093 return bRet; 00094 }
gboolean erscribble_is_rect_intersect | ( | const ScbRectPtr | rect1, | |
const ScbRectPtr | rect2 | |||
) |
Copyright (C) 2008 iRex Technologies B.V. All rights reserved.
Definition at line 71 of file scbutil.c.
References _ScbRect::bottom, _ScbRect::left, _ScbRect::right, and _ScbRect::top.
Referenced by erscribble_stroke_line_hit_test(), and erscribble_stroke_point_hit_test().
00073 { 00074 // check two rectangles is intersect or not, 00075 // these two rectangles should be normalized. 00076 return ! ( r2->left > r1->right 00077 || r2->right < r1->left 00078 || r2->top > r1->bottom 00079 || r2->bottom < r1->top 00080 ); 00081 }