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

📄 gilbert.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "map.h"intXgilbert(struct place *p, double *x, double *y){/* the interesting part - map the sphere onto a hemisphere */	struct place q;	q.nlat.s = tan(0.5*(p->nlat.l));	if(q.nlat.s > 1) q.nlat.s = 1;	if(q.nlat.s < -1) q.nlat.s = -1;	q.nlat.c = sqrt(1 - q.nlat.s*q.nlat.s);	q.wlon.l = p->wlon.l/2;	sincos(&q.wlon);/* the dull part: present the hemisphere orthogrpahically */	*y = q.nlat.s;	*x = -q.wlon.s*q.nlat.c;	return(1);}projgilbert(void){	return(Xgilbert);}/* derivation of the interesting part:   map the sphere onto the plane by stereographic projection;   map the plane onto a half plane by sqrt;   map the half plane back to the sphere by stereographic   projection   n,w are original lat and lon   r is stereographic radius   primes are transformed versions   r = cos(n)/(1+sin(n))   r' = sqrt(r) = cos(n')/(1+sin(n'))   r'^2 = (1-sin(n')^2)/(1+sin(n')^2) = cos(n)/(1+sin(n))   this is a linear equation for sin n', with solution   sin n' = (1+sin(n)-cos(n))/(1+sin(n)+cos(n))   use standard formula: tan x/2 = (1-cos x)/sin x = sin x/(1+cos x)   to show that the right side of the last equation is tan(n/2)*/

⌨️ 快捷键说明

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