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

📄 perspective.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "map.h"#define ORTHRAD 1000static double viewpt;static intXperspective(struct place *place, double *x, double *y){	double r;	if(viewpt<=1+FUZZ && fabs(place->nlat.s<=viewpt+.01))		return(-1);	r = place->nlat.c*(viewpt - 1.)/(viewpt - place->nlat.s);	*x = - r*place->wlon.s;	*y = - r*place->wlon.c;	if(r>4.)		return(-1);	if(fabs(viewpt)>1 && place->nlat.s<1/viewpt ||	   fabs(viewpt)<=1 && place->nlat.s<viewpt)			return 0;	return(1);}projperspective(double radius){	viewpt = radius;	if(viewpt >= ORTHRAD)		return(Xorthographic);	if(fabs(viewpt-1.)<.0001)		return(0);	return(Xperspective);}	/* called from various conformal projections,           but not from stereographic itself */intXstereographic(struct place *place, double *x, double *y){	double v = viewpt;	int retval;	viewpt = -1;	retval = Xperspective(place, x, y);	viewpt = v;	return retval;}projstereographic(void){	viewpt = -1.;	return(Xperspective);}projgnomonic(void){	viewpt = 0.;	return(Xperspective);}intplimb(double *lat, double *lon, double res){	static first = 1;	if(viewpt >= ORTHRAD)		return olimb(lat, lon, res);	if(first) {		first = 0;		*lon = -180;		if(fabs(viewpt) < .01)			*lat = 0;		else if(fabs(viewpt)<=1)			*lat = asin(viewpt)/RAD;		else			*lat = asin(1/viewpt)/RAD;	} else		*lon += res;	if(*lon <= 180)		return 1;	first = 1;	return -1;}

⌨️ 快捷键说明

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