You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Rob Hartill <ha...@hyperreal.com> on 1995/10/03 04:16:22 UTC
(no subject) (fwd)
no ack sent
Forwarded message:
> From stein@gcomm.com Mon Oct 2 17:02:49 1995
> Message-Id: <19...@taz.hyperreal.com>
> Date: Mon, 02 Oct 95 20:01:56 -0700
> From: Bob Stein <st...@gcomm.com>
> Organization: Galacticomm, Inc.
> X-Mailer: Mozilla 1.22 (Windows; I; 16bit)
> MIME-Version: 1.0
> To: apache-bugs@mail.apache.org
> Subject: (no subject)
> Content-Transfer-Encoding: 7bit
> Content-Type: text/plain; charset=us-ascii
>
> Dear Apache folks,
>
> Here is a function for determining whether a point is in a polygon. It can be used by
> HTTP servers to support clickable image maps. My friend Craig and I wrote the thing
> because we thought some existing code for this algorithm was pretty ridiculously
> over-complicated. If you have any use for it in the Apache project, please feel free,
> we'd be honored. Please give credit where credit is due.
>
> -- Bob Stein Internet mail: stein@gcomm.com
> ______________________________________________________________________
> | |
> | Galacticomm, Inc. (305) 583-5990 (voice) |
> | 4101 SW 47 Avenue, Suite 101 (305) 583-7846 (FAX) |
> | Ft Lauderdale, Florida, USA, 33314 (305) 583-7808 (modem) |
> |______________________________________________________________________|
>
>
>
> /***************************************************************************
> * *
> * INPOLY.C *
> * *
> * Copyright (C) 1995 GALACTICOMM, Inc. Freeware source code. *
> * *
> * Please feel free to use this source code for any purpose, commercial *
> * or otherwise, as long as you don't restrict anyone else's use of *
> * this source code. Please give credit where credit is due. *
> * *
> * Point-in-polygon algorithm, created especially for World-Wide Web *
> * servers to process image maps with mouse-clickable regions. *
> * *
> * Home for this file: ftp://gcomm.com/library/develop/inpoly.c *
> * *
> * 6/19/95 - Bob Stein & Craig Yap *
> * *
> ***************************************************************************/
>
> #define FILREV "$Revision: 1.0$"
>
> int /* 1=inside, 0=outside */
> inpoly( /* is target point inside a 2D polygon? */
> unsigned int poly[][2], /* polygon points, [0]=x, [1]=y */
> int npoints, /* number of points in polygon */
> unsigned int xt, /* x (horizontal) of target point */
> unsigned int yt) /* y (vertical) of target point */
> {
> unsigned int xnew,ynew;
> unsigned int xold,yold;
> unsigned int x1,y1;
> unsigned int x2,y2;
> int i;
> int inside;
>
> if (npoints < 3) {
> return(0);
> }
> inside=0;
> xold=poly[npoints-1][0];
> yold=poly[npoints-1][1];
> for (i=0 ; i < npoints ; i++) {
> xnew=poly[i][0];
> ynew=poly[i][1];
> if (xnew > xold) {
> x1=xold;
> x2=xnew;
> y1=yold;
> y2=ynew;
> }
> else {
> x1=xnew;
> x2=xold;
> y1=ynew;
> y2=yold;
> }
>
> if ((xnew < xt) == (xt <= xold)
> && ((long)yt-(long)y1)*(long)(x2-x1)
> < ((long)y2-(long)y1)*(long)(xt-x1)) {
> inside=!inside;
> }
> xold=xnew;
> yold=ynew;
> }
> return(inside);
> }
>
>
>
>
>