ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

polyUtil.cc
Go to the documentation of this file.
00001 /*
00002 ** License Applicability. Except to the extent portions of this file are
00003 ** made subject to an alternative license as permitted in the SGI Free
00004 ** Software License B, Version 1.1 (the "License"), the contents of this
00005 ** file are subject only to the provisions of the License. You may not use
00006 ** this file except in compliance with the License. You may obtain a copy
00007 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
00008 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
00009 ** 
00010 ** http://oss.sgi.com/projects/FreeB
00011 ** 
00012 ** Note that, as provided in the License, the Software is distributed on an
00013 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
00014 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
00015 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
00016 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
00017 ** 
00018 ** Original Code. The Original Code is: OpenGL Sample Implementation,
00019 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
00020 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
00021 ** Copyright in any portions created by third parties is as indicated
00022 ** elsewhere herein. All Rights Reserved.
00023 ** 
00024 ** Additional Notice Provisions: The application programming interfaces
00025 ** established by SGI in conjunction with the Original Code are The
00026 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
00027 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
00028 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
00029 ** Window System(R) (Version 1.3), released October 19, 1998. This software
00030 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
00031 ** published by SGI, but has not been independently verified as being
00032 ** compliant with the OpenGL(R) version 1.2.1 Specification.
00033 **
00034 ** $Date: 2006-03-12 00:07:02 +0000 (Sun, 12 Mar 2006) $ $Revision: 1.1 $
00035 */
00036 /*
00037 ** $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/nurbtess/polyUtil.cc,v 1.1 2004/02/02 16:39:13 navaraf Exp $
00038 */
00039 
00040 #include <stdlib.h>
00041 #include <stdio.h>
00042 
00043 #include "polyUtil.h"
00044 
00045 Real area(Real A[2], Real B[2], Real C[2])
00046 {
00047   Real Bx, By, Cx, Cy;
00048   Bx = B[0] - A[0];
00049   By = B[1] - A[1];
00050   Cx = C[0] - A[0];
00051   Cy = C[1] - A[1];
00052   return Bx*Cy - Cx*By;
00053 
00054 /*  return (B[0]-A[0])*(C[1]-A[1]) - (C[0]-A[0])*(B[1]-A[1]);*/
00055 }
00056 
00057 /*given a directed line A->B, and a point P, 
00058  *determine whether P is to the left of AB.
00059  *the line A->B (imagine it has beedn extended both 
00060  *end to the infinity) divides the plan into two 
00061  *half planes. When we walk from A to B, one
00062  *half is to the left and the other half is to the right.
00063  *return 1 if P is to the left.
00064  *if P is on AB, 0 is returned.
00065  */
00066 Int pointLeftLine(Real A[2], Real B[2],  Real P[2])
00067 {
00068   if(area(A, B, P) >0) return 1;
00069   else return 0;
00070 }
00071 
00072 /*given two directed line: A -> B -> C, and another point P.
00073  *determine whether P is to the left hand side of A->B->C.
00074  *Think of BA and BC extended as two rays. So that the plane is
00075  * divided into two parts. One part is to the left we  walk from A 
00076  *to B and to C, the other part is to the right.
00077  * In order for P to be the left, P must be either to the left 
00078  *of 
00079  */
00080 Int pointLeft2Lines(Real A[2], Real B[2], Real C[2], Real P[2])
00081 {
00082   Int C_left_AB = (area(A, B, C)>0);
00083   Int P_left_AB = (area(A, B, P)>0);
00084   Int P_left_BC = (area(B, C, P)>0);
00085 
00086   if(C_left_AB)
00087     {
00088       return (P_left_AB && P_left_BC);
00089     }
00090   else
00091     return  (P_left_AB || P_left_BC);
00092 }

Generated on Sun May 27 2012 04:23:49 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.