⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colinear.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//*********************** self documentation **********************//******************************************************************************COLINEAR - determine if edges or vertecies are COLINEAR in triangulated           modeledgesColinear		see whether or not two edges are colinearvertexBetweenVertices	determine whether or not a vertex is on a line                          between two other vertices*******************************************************************************Function Prototypes:int edgesColinear (Edge *e1, Edge *e2);int vertexBetweenVertices (Vertex *v, Vertex *v1, Vertex *v2);*******************************************************************************edgesColinear:Input:e1	pointer to first Edgee2	pointer to second EdgeReturns: (int)1	if colinearvertexBetweenVertices:Input:v		pointer to first Vertex in questionv1		pointer to first reference Vertexv2		pointer to second reference VertexReturns: integer1		if v=v1 or v=v2 or if v is between v1 and v20		otherwise*******************************************************************************Author:  Dave Hale, Colorado School of Mines, Fall 1990.******************************************************************************//**************** end self doc ********************************/#include "Triangles/triP.h"int edgesColinear (Edge *e1, Edge *e2)/******************************************************************************edgesColinear - see whether or not two edges are colinear*******************************************************************************Input:e1	pointer to first Edgee2	pointer to second EdgeReturns: (int)1	if colinear0	if not colinear*******************************************************************************Author:  Dave Hale, Colorado School of Mines, 07/10/90******************************************************************************/{	float xa,xb,ya,yb,x1,x2,y1,y2,c12,a1,a2,s12;	/* edge vectors */	xa = e1->eu->vu->v->x;  xb = e1->eu->euCW->vu->v->x;	ya = e1->eu->vu->v->y;  yb = e1->eu->euCW->vu->v->y;	x1 = xb-xa;	y1 = yb-ya;	xa = e2->eu->vu->v->x;  xb = e2->eu->euCW->vu->v->x;	ya = e2->eu->vu->v->y;  yb = e2->eu->euCW->vu->v->y;	x2 = xb-xa;	y2 = yb-ya;		/* cross-product of vectors 1 and 2 */	c12 = x1*y2-x2*y1;		/* magnitude-squared of x1 and x2 */	a1 = x1*x1+y1*y1;	a2 = x2*x2+y2*y2;		/* sin-squared of angle between vectors 1 and 2 */	s12 = (c12*c12)/(a1*a2);		/* if sin-squared less than tiny number, then colinear */	if (s12<0.0001)		return 1;	else		return 0;}int vertexBetweenVertices (Vertex *v, Vertex *v1, Vertex *v2)/*****************************************************************************vertexBetweenVertices - determine whether or not a vertex is on a line                        between two other vertices******************************************************************************Input:v		pointer to first Vertex in questionv1		pointer to first reference Vertexv2		pointer to second reference VertexReturns: integer1		if v=v1 or v=v2 or if v is between v1 and v20		otherwise******************************************************************************Author: Dave Hale, Center for Wave Phenomena, c. 1990 1991.*****************************************************************************/{	float xa,xb,ya,yb,x1,x2,y1,y2,x12,y12,a1,a2,a12,c,s1,s2,d1,d2;	/* vectors 1, 2, and 12 */	xa = v1->x;  xb = v->x;  x1 = xb-xa;	ya = v1->y;  yb = v->y;  y1 = yb-ya;	xa = v2->x;  xb = v->x;  x2 = xb-xa;	ya = v2->y;  yb = v->y;  y2 = yb-ya;	xa = v1->x;  xb = v2->x;  x12 = xb-xa;	ya = v1->y;  yb = v2->y;  y12 = yb-ya;		/* magnitude-squared of vectors */	a1 = x1*x1+y1*y1;	a2 = x2*x2+y2*y2;	a12 = x12*x12+y12*y12;		/* handle case where v equals v1 or v2 */	if (a1==0.0 || a2==0.0) return 1;		/* handle case where v1 equals v2 */	if (a12==0.0) return 0;		/* test sign of product of (1 dot 12) and (2 dot 12) */	d1 = x1*x12+y1*y12;	d2 = x2*x12+y2*y12;	if (d1*d2>0.0) return 0;		/* test sin-squared of angle between vectors 1 and 12 */	c = x1*y12-x12*y1;	s1 = (c*c)/(a1*a12);	if (s1>0.0001) return 0;		/* test sin-squared of angle between vectors 2 and 12 */	c = x2*y12-x12*y2;	s2 = (c*c)/(a2*a12);	if (s2>0.0001) return 0;		/* if passed all the checks, then v is on line between v1 and v2 */	return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -