You can subscribe to this list here.
2000 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}
(33) 
_{Jun}

_{Jul}
(30) 
_{Aug}
(2) 
_{Sep}

_{Oct}
(30) 
_{Nov}
(136) 
_{Dec}
(59) 

2001 
_{Jan}
(255) 
_{Feb}
(169) 
_{Mar}
(322) 
_{Apr}
(185) 
_{May}
(33) 
_{Jun}
(89) 
_{Jul}
(47) 
_{Aug}
(59) 
_{Sep}
(40) 
_{Oct}
(31) 
_{Nov}
(74) 
_{Dec}
(84) 
2002 
_{Jan}
(163) 
_{Feb}
(78) 
_{Mar}
(23) 
_{Apr}
(5) 
_{May}
(22) 
_{Jun}
(75) 
_{Jul}
(143) 
_{Aug}
(48) 
_{Sep}
(111) 
_{Oct}
(58) 
_{Nov}
(124) 
_{Dec}
(278) 
2003 
_{Jan}
(106) 
_{Feb}
(276) 
_{Mar}
(354) 
_{Apr}
(97) 
_{May}
(14) 
_{Jun}
(3) 
_{Jul}
(7) 
_{Aug}
(21) 
_{Sep}
(83) 
_{Oct}
(110) 
_{Nov}
(3) 
_{Dec}
(119) 
2004 
_{Jan}
(318) 
_{Feb}
(409) 
_{Mar}
(68) 
_{Apr}
(23) 
_{May}
(105) 
_{Jun}
(147) 
_{Jul}
(69) 
_{Aug}
(53) 
_{Sep}
(23) 
_{Oct}
(14) 
_{Nov}
(15) 
_{Dec}
(63) 
2005 
_{Jan}
(146) 
_{Feb}
(69) 
_{Mar}
(157) 
_{Apr}
(127) 
_{May}
(166) 
_{Jun}
(8) 
_{Jul}
(5) 
_{Aug}
(3) 
_{Sep}
(8) 
_{Oct}
(17) 
_{Nov}
(29) 
_{Dec}
(34) 
2006 
_{Jan}
(3) 
_{Feb}
(4) 
_{Mar}
(1) 
_{Apr}
(70) 
_{May}
(241) 
_{Jun}
(82) 
_{Jul}
(344) 
_{Aug}
(196) 
_{Sep}
(87) 
_{Oct}
(57) 
_{Nov}
(121) 
_{Dec}
(86) 
2007 
_{Jan}
(60) 
_{Feb}
(67) 
_{Mar}
(102) 
_{Apr}
(28) 
_{May}
(13) 
_{Jun}
(29) 
_{Jul}
(38) 
_{Aug}
(56) 
_{Sep}
(91) 
_{Oct}
(89) 
_{Nov}
(50) 
_{Dec}
(68) 
2008 
_{Jan}
(87) 
_{Feb}
(47) 
_{Mar}
(100) 
_{Apr}
(34) 
_{May}
(65) 
_{Jun}
(54) 
_{Jul}
(98) 
_{Aug}
(128) 
_{Sep}
(109) 
_{Oct}
(141) 
_{Nov}
(40) 
_{Dec}
(206) 
2009 
_{Jan}
(176) 
_{Feb}
(226) 
_{Mar}
(134) 
_{Apr}
(84) 
_{May}
(152) 
_{Jun}
(85) 
_{Jul}
(91) 
_{Aug}
(153) 
_{Sep}
(141) 
_{Oct}
(59) 
_{Nov}
(87) 
_{Dec}
(75) 
2010 
_{Jan}
(58) 
_{Feb}
(41) 
_{Mar}
(51) 
_{Apr}
(74) 
_{May}
(81) 
_{Jun}
(39) 
_{Jul}
(30) 
_{Aug}
(43) 
_{Sep}
(76) 
_{Oct}
(59) 
_{Nov}
(62) 
_{Dec}
(52) 
2011 
_{Jan}
(125) 
_{Feb}
(41) 
_{Mar}
(96) 
_{Apr}
(53) 
_{May}
(21) 
_{Jun}
(23) 
_{Jul}
(48) 
_{Aug}
(71) 
_{Sep}
(37) 
_{Oct}
(81) 
_{Nov}
(60) 
_{Dec}
(32) 
2012 
_{Jan}
(51) 
_{Feb}
(23) 
_{Mar}

_{Apr}
(8) 
_{May}
(2) 
_{Jun}

_{Jul}
(8) 
_{Aug}
(25) 
_{Sep}
(4) 
_{Oct}
(32) 
_{Nov}
(17) 
_{Dec}
(2) 
2013 
_{Jan}
(8) 
_{Feb}
(2) 
_{Mar}
(9) 
_{Apr}
(9) 
_{May}
(37) 
_{Jun}
(48) 
_{Jul}
(63) 
_{Aug}
(42) 
_{Sep}
(59) 
_{Oct}
(83) 
_{Nov}
(141) 
_{Dec}
(133) 
2014 
_{Jan}
(57) 
_{Feb}
(58) 
_{Mar}
(58) 
_{Apr}
(25) 
_{May}
(14) 
_{Jun}
(3) 
_{Jul}
(6) 
_{Aug}
(1) 
_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 






1
(5) 
2

3

4
(7) 
5
(16) 
6
(4) 
7

8
(2) 
9
(1) 
10

11

12
(1) 
13

14

15
(6) 
16

17
(2) 
18
(5) 
19
(5) 
20
(1) 
21
(1) 
22
(1) 
23

24

25
(4) 
26
(1) 
27
(47) 
28
(14) 
29
(4) 
30

From: Arjen Markus <arjenmarkus@us...>  20050422 09:49:00

Update of /cvsroot/plplot/plplot/src In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv11516 Modified Files: plline.c Log Message: Added the logic to properly fill a polygon that encircles all four corners of the viewport and crosses but one side. Corrected bug in pointinpolygon(). Index: plline.c =================================================================== RCS file: /cvsroot/plplot/plplot/src/plline.c,v retrieving revision 1.32 retrieving revision 1.33 diff u d r1.32 r1.33  plline.c 27 Jan 2005 14:27:19 0000 1.32 +++ plline.c 22 Apr 2005 09:48:49 0000 1.33 @@ 58,6 +58,9 @@ static int pointinpolygon( int n, short *x, short *y, PLINT xp, PLINT yp ); +static int +pointinpolygonPLINT( int n, PLINT *x, PLINT *y, PLINT xp, PLINT yp ); + /**\ * void pljoin() * @@ 627,6 +630,8 @@ int crossed_ymin1 = 0, crossed_ymax1 = 0; int crossed_xmin2 = 0, crossed_xmax2 = 0; int crossed_ymin2 = 0, crossed_ymax2 = 0; + int crossed_up = 0, crossed_down = 0; + int crossed_left = 0, crossed_right = 0; /* Must have at least 3 points and draw() specified */ if (npts < 3  !draw) return; @@ 648,8 +653,12 @@ /* Boundary crossing condition  coming in. */ crossed_xmin2 = (x1 == xmin); crossed_xmax2 = (x1 == xmax); crossed_ymin2 = (y1 == ymin); crossed_ymax2 = (y1 == ymax);  iout = iclp+2; + crossed_left = (crossed_left  crossed_xmin2); + crossed_right = (crossed_right  crossed_xmax2); + crossed_down = (crossed_down  crossed_ymin2); + crossed_up = (crossed_up  crossed_ymax2); + iout = iclp+2; /* If the first segment, just add it. */ if (iclp == 0) { @@ 965,6 +974,39 @@ } } +/* Check for the case that only one side has been crossed */ + if ( crossed_left+crossed_right+crossed_down+crossed_up == 1 && + pointinpolygonPLINT(npts,x,y,xmin,ymin) ) { + int dir = circulation(x, y, npts); + PLINT xlim[4], ylim[4]; + int insert; + int incr; + + printf( "Add corners\n" ) ; + + xlim[0] = xmin ; ylim[0] = ymin ; + xlim[1] = xmax ; ylim[1] = ymin ; + xlim[2] = xmax ; ylim[2] = ymax ; + xlim[3] = xmin ; ylim[3] = ymax ; + if ( dir > 0 ) { + incr = 1; + insert = 0*crossed_left + 1*crossed_down + 2*crossed_right + + 3*crossed_up ; + } else { + incr = 1; + insert = 3*crossed_left + 2*crossed_up + 1*crossed_right + + 0*crossed_down ; + } + for ( i=0; i < 4; i ++ ) { + xclp[iclp] = xlim[insert] ; + yclp[iclp] = ylim[insert] ; + iclp ++ ; + insert += incr ; + if ( insert > 3 ) insert = 0 ; + if ( insert < 0 ) insert = 3 ; + } + } + /* Draw the sucker */ if (iclp >= 3) (*draw)(xclp, yclp, iclp); @@ 1284,8 +1326,8 @@ yv1 = y1  yout; xv2 = x2  xout; yv2 = y2  yout;  inprod1 = xv1*xvp + yv1*yvp;  inprod2 = xv2*xvp + yv2*yvp; + inprod1 = xv1*yvp  yv1*xvp; /* Well, with the normal vector */ + inprod2 = xv2*yvp  yv2*xvp; if ( inprod1 * inprod2 > 0.0 ) { /* No crossing possible! */ continue; @@ 1299,8 +1341,110 @@ yv1 = ypp  y1; xv2 = xout  x2; yv2 = yout  y2;  inprod1 = xv1*xvv + yv1*yvv;  inprod2 = xv2*xvv + yv2*yvv; + inprod1 = xv1*yvv  yv1*xvv; + inprod2 = xv2*yvv  yv2*xvv; + if ( inprod1 * inprod2 > 0.0 ) { + /* No crossing possible! */ + continue; + } + + /* We do have a crossing */ + count_crossings ++; + } + + /* Return the result: an even number of crossings means the + point is outside the polygon */ + + return (count_crossings%2); +} + +/**\ + * int pointinpolygonPLINT() + * + * Returns 1 if the point is inside the polygon, 0 otherwise + * + * (AM) Unfortunately I had to have a version that can deal with + * PLINT coordinates ... this was the easiest way. +\**/ + +static int +pointinpolygonPLINT( int n, PLINT *x, PLINT *y, PLINT xp, PLINT yp ) +{ + int i; + int count_crossings; + PLFLT x1, y1, x2, y2, xpp, ypp, xout, yout, xmax; + PLFLT xvp, yvp, xvv, yvv, xv1, yv1, xv2, yv2; + PLFLT inprod1, inprod2; + + xpp = (PLFLT) xp; + ypp = (PLFLT) yp; + + count_crossings = 0; + + + /* Determine a point outside the polygon */ + + xmax = x[0] ; + xout = x[0] ; + yout = y[0] ; + for ( i = 0; i < n ; i ++ ) { + if ( xout > x[i] ) { + xout = x[i] ; + } + if ( xmax < x[i] ) { + xmax = x[i] ; + } + } + xout = xout  (xmaxxout) ; + + /* Determine for each side whether the line segment between + our two points crosses the vertex */ + + xpp = (PLFLT) xp; + ypp = (PLFLT) yp; + + xvp = xpp  xout; + yvp = ypp  yout; + + for ( i = 0; i <= n; i ++ ) { + x1 = (PLFLT) x[i] ; + y1 = (PLFLT) y[i] ; + if ( i < n ) { + x2 = (PLFLT) x[i+1] ; + y2 = (PLFLT) y[i+1] ; + } else { + x2 = (PLFLT) x[0] ; + y2 = (PLFLT) y[0] ; + } + + /* Skip zerolength segments */ + if ( x1 == x2 && y1 == y2 ) { + continue; + } + + /* Line through the two fixed points: + Are x1 and x2 on either side? */ + xv1 = x1  xout; + yv1 = y1  yout; + xv2 = x2  xout; + yv2 = y2  yout; + inprod1 = xv1*yvp  yv1*xvp; /* Well, with the normal vector */ + inprod2 = xv2*yvp  yv2*xvp; + if ( inprod1 * inprod2 > 0.0 ) { + /* No crossing possible! */ + continue; + } + + /* Line through the two vertices: + Are xout and xpp on either side? */ + xvv = x2  x1; + yvv = y2  y1; + xv1 = xpp  x1; + yv1 = ypp  y1; + xv2 = xout  x2; + yv2 = yout  y2; + inprod1 = xv1*yvv  yv1*xvv; + inprod2 = xv2*yvv  yv2*xvv; if ( inprod1 * inprod2 > 0.0 ) { /* No crossing possible! */ continue; @@ 1313,6 +1457,5 @@ /* Return the result: an even number of crossings means the point is outside the polygon */  printf( "Number of crossings: %d\n", count_crossings ); return (count_crossings%2); } 