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

📄 nearest.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//*********************** self documentation **********************//*****************************************************************************NEAREST - NEAREST edge or vertex in triangulated modelnearestEdgeInModel	Return pointer to edge in model nearest to                    	specified (x,y) coordinatesnearestVertexInModel	Return pointer to vertex in model nearest                   	to specified (x,y) coordinates******************************************************************************Function Prototypes:Vertex* nearestVertexInModel (Model *m, Vertex *start, float x, float y);Edge* nearestEdgeInModel (Model *m, Edge *start, float x, float y);******************************************************************************nearestEdgeInModel:Input:m		modelstart		edge to look at first (NULL to begin looking anywhere)x		x-coordinatey		y-coordinateReturns: pointer to nearest EdgenearestVertexInModel:Input:m		modelstart		vertex to look at first (NULL to begin looking anywhere)x		x-coordinatey		y-coordinateReturns: pointer to nearest Vertex******************************************************************************Author:  Dave Hale, Colorado School of Mines, Fall 1990******************************************************************************//**************** end self doc ********************************/#include "Triangles/triP.h"Edge* nearestEdgeInModel (Model *m, Edge *start, float x, float y)/*****************************************************************************nearestEdgeInModel - Return pointer to edge in model nearest to                     specified (x,y) coordinates******************************************************************************Input:m		modelstart		edge to look at first (NULL to begin looking anywhere)x		x-coordinatey		y-coordinateReturns: pointer to nearest Edge******************************************************************************Author:  Dave Hale, Colorado School of Mines, 09/11/90******************************************************************************/{	float d,dmin=0.0;	Edge *emin=NULL;	EdgeUse *eu;	Tri *t;		/* find triangle containing point */	if (start!=NULL) {		t = (start->eu->f!=NULL?start->eu->f:start->eu->euMate->f);		t = insideTriInModel(m,t,x,y);	} else {		t = insideTriInModel(m,NULL,x,y);	}		/* loop over edges in triangle */	eu = t->eu;	do {				/* compute distance to edge */		d = distanceToEdge(eu->e,x,y);				/* update minimum distance */		if (eu==t->eu || d<dmin) {			dmin = d;			emin = eu->e;		}				/* next edge */		eu = eu->euCW;			} while (eu!=t->eu);		/* return edge corresponding to minimum distance */	return emin;}Vertex* nearestVertexInModel (Model *m, Vertex *start, float x, float y)/*****************************************************************************nearestVertexInModel - Return pointer to vertex in model nearest                       to specified (x,y) coordinates******************************************************************************Input:m		modelstart		vertex to look at first (NULL to begin looking anywhere)x		x-coordinatey		y-coordinateReturns: pointer to nearest Vertex******************************************************************************Author:  Dave Hale, Colorado School of Mines, 07/10/90******************************************************************************/{	float dx,dy,ds,dsmin;	Vertex *v,*vmin,*vn;	VertexUse *vu;	EdgeUse *eu;	/* start at some vertex in model */	vmin = (start==NULL ? m->f->eu->vu->v : start);	dx = vmin->x-x;	dy = vmin->y-y;	dsmin = dx*dx+dy*dy;		/* hop from vertex to vertex, always moving closer to (x,y) */	do {		v = vmin;		vu = v->vu;		do {			eu = vu->eu;			vn = eu->euCW->vu->v;			dx = vn->x-x;			dy = vn->y-y;			ds = dx*dx+dy*dy;			if (dsmin>ds) {				dsmin = ds;				vmin = vn;			}			vu = vu->vuNext;		} while (vu!=v->vu);			} while (v!=vmin);		return v;}

⌨️ 快捷键说明

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