亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 簡單計算幾何算法_源程序.txt

?? 常用計算幾何算法,主要是點,線,面之間的關系以及距離等運算.為C語言實現
?? TXT
字號:
// 返回兩點之間的距離
float Distance(POINT p1, POINT p2)
{
	float fRet;
	fRet = sqrt( (double)( (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) ) );
	return fRet;
}
float Distance(POINT p1, pointf p2)
{
	float fRet;
	fRet = sqrt( (double)( (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) ) );
	return fRet;
}

// 返回點c到線段ab的最小距離
// a和b是線段的兩個端點, c是檢測點
float DistanceLine(POINT  a, POINT b, POINT c)  
{
	POINT  ab; // = b - a;
	ab.x = b.x - a.x;
	ab.y = b.y - a.y;
	POINT ac;// = c-a;
	ac.x = c.x - a.x;
	ac.y = c.y - a.y;
	float f ;//= ab * ac;
	f = ab.x * ac.x + ab.y * ac.y;
	if ( f<0 ) 
	{
		return Distance(a, c);
	}
	float d;// = ab * ab;
	d = ab.x * ab.x + ab.y * ab.y;
	if ( f>d) return Distance(b, c);
	f = f/d; 
	pointf D;// = a + f *ab;   // c在ab線段上的投影點
	D.x = a.x + f * ab.x;
	D.y = a.y + f * ab.y;
	return Distance(a, D);
}


計算幾何算法(含源代碼)㈠ 點的基本運算 
1. 平面上兩點之間距離 1 
2. 判斷兩點是否重合 1 
3. 矢量叉乘 1 
4. 矢量點乘 2 
5. 判斷點是否在線段上 2 
6. 求一點饒某點旋轉后的坐標 2 
7. 求矢量夾角 2 

㈡ 線段及直線的基本運算 
1. 點與線段的關系 3 
2. 求點到線段所在直線垂線的垂足 4 
3. 點到線段的最近點 4 
4. 點到線段所在直線的距離 4 
5. 點到折線集的最近距離 4 
6. 判斷圓是否在多邊形內 5 
7. 求矢量夾角余弦 5 
8. 求線段之間的夾角 5 
9. 判斷線段是否相交 6 
10.判斷線段是否相交但不交在端點處 6 
11.求線段所在直線的方程 6 
12.求直線的斜率 7 
13.求直線的傾斜角 7 
14.求點關于某直線的對稱點 7 
15.判斷兩條直線是否相交及求直線交點 7 
16.判斷線段是否相交,如果相交返回交點 7 

㈢ 多邊形常用算法模塊 
1. 判斷多邊形是否簡單多邊形 8 
2. 檢查多邊形頂點的凸凹性 9 
3. 判斷多邊形是否凸多邊形 9 
4. 求多邊形面積 9 
5. 判斷多邊形頂點的排列方向,方法一 10 
6. 判斷多邊形頂點的排列方向,方法二 10 
7. 射線法判斷點是否在多邊形內 10 
8. 判斷點是否在凸多邊形內 11 
9. 尋找點集的graham算法 12 
10.尋找點集凸包的卷包裹法 13 
11.判斷線段是否在多邊形內 14 
12.求簡單多邊形的重心 15 
13.求凸多邊形的重心 17 
14.求肯定在給定多邊形內的一個點 17 
15.求從多邊形外一點出發到該多邊形的切線 18 
16.判斷多邊形的核是否存在 19 

㈣ 圓的基本運算 
1 .點是否在圓內 20 
2 .求不共線的三點所確定的圓 21 

㈤ 矩形的基本運算 
1.已知矩形三點坐標,求第4點坐標 22 

㈥ 常用算法的描述 22 

㈦ 補充 
1.兩圓關系: 24 
2.判斷圓是否在矩形內: 24 
3.點到平面的距離: 25 
4.點是否在直線同側: 25 
5.鏡面反射線: 25 
6.矩形包含: 26 
7.兩圓交點: 27 
8.兩圓公共面積: 28 
9. 圓和直線關系: 29 
10. 內切圓: 30 
11. 求切點: 31 
12. 線段的左右旋: 31 
13.公式: 32 


/* 需要包含的頭文件 */ 
#include 

/* 常用的常量定義 */ 
const double INF = 1E200 
const double EP = 1E-10 
const int MAXV = 300 
const double PI = 3.14159265 

/* 基本幾何結構 */ 
struct POINT 
{ 
double x; 
double y; POINT(double a=0, double b=0) { x=a; y=b;} file://constructor 
}; 
struct LINESEG 
{ 
POINT s; 
POINT e; LINESEG(POINT a, POINT b) { s=a; e=b;} 
LINESEG() { } 
}; 
struct LINE // 直線的解析方程 a*x+b*y+c=0 為統一表示,約定 a >= 0 
{ 
double a; 
double b; 
double c; LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;} 
}; 

/********************\ 
* * 
* 點的基本運算 * 
* * 
\********************/ 

double dist(POINT p1,POINT p2) // 返回兩點之間歐氏距離 
{ 
return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) ); 
} 
bool equal_point(POINT p1,POINT p2) // 判斷兩個點是否重合 
{ 
return ( (abs(p1.x-p2.x)} 

/*****************************************************************************
* 
r=multiply(sp,ep,op),得到(sp-op)*(ep-op)的叉積 
r>0:ep在矢量opsp的逆時針方向; 
r=0:opspep三點共線; 
r<0:ep在矢量opsp的順時針方向 
******************************************************************************
*/ 

double multiply(POINT sp,POINT ep,POINT op) 
{ 
return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y)); 
} 

/*****************************************************************************
** 
r=dotmultiply(p1,p2,op),得到矢量(p1-op)和(p2-op)的點積,如果兩個矢量都非零矢量
 
r<0:兩矢量夾角為銳角;r=0:兩矢量夾角為直角;r>0:兩矢量夾角為鈍角 
******************************************************************************
*/ 
double dotmultiply(POINT p1,POINT p2,POINT p0) 
{ 
return ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y)); 
} 

/* 判斷點p是否在線段l上,條件:(p在線段l所在的直線上)&& (點p在以線段l為對角線的
矩形內) */ 
bool online(LINESEG l,POINT p) 
{ 
return((multiply(l.e,p,l.s)==0) 
&&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) ); 
} 

// 返回點p以點o為圓心逆時針旋轉alpha(單位:弧度)后所在的位置 
POINT rotate(POINT o,double alpha,POINT p) 
{ 
POINT tp; 
p.x-=o.x; 
p.y-=o.y; 
tp.x=p.x*cos(alpha)-p.y*sin(alpha)+o.x; 
tp.y=p.y*cos(alpha)+p.x*sin(alpha)+o.y; 
return tp; 
} 

/* 返回頂角在o點,起始邊為os,終止邊為oe的夾角(單位:弧度) 
角度小于pi,返回正值 
角度大于pi,返回負值 
可以用于求線段之間的夾角 
*/ 
double angle(POINT o,POINT s,POINT e) 
{ 
double cosfi,fi,norm; 
double dsx = s.x - o.x; 
double dsy = s.y - o.y; 
double dex = e.x - o.x; 
double dey = e.y - o.y; 

cosfi=dsx*dex+dsy*dey; 
norm=(dsx*dsx+dey*dey)*(dex*dex+dey*dey); 
cosfi /= sqrt( norm ); 

if (cosfi >= 1.0 ) return 0; 
if (cosfi <= -1.0 ) return -3.1415926; 

fi=acos(cosfi); 
if (dsx*dey-dsy*dex>0) return fi; // 說明矢量os 在矢量 oe的順時針方向 
return -fi; 
} 


/*****************************\ 
* * 
* 線段及直線的基本運算 * 
* * 
\*****************************/ 

/* 判斷點與線段的關系,用途很廣泛 
本函數是根據下面的公式寫的,P是點C到線段AB所在直線的垂足 

AC dot AB 
r = --------- 
||AB||^2 
(Cx-Ax)(Bx-Ax) + (Cy-Ay)(By-Ay) 
= ------------------------------- 
L^2 

r has the following meaning: 

r=0 P = A 
r=1 P = B 
r<0 P is on the backward extension of AB 
r>1 P is on the forward extension of AB 
0*/ 
double relation(POINT p,LINESEG l) 
{ 
LINESEG tl; 
tl.s=l.s; 
tl.e=p; 
return dotmultiply(tl.e,l.e,l.s)/(dist(l.s,l.e)*dist(l.s,l.e)); 
} 

// 求點C到線段AB所在直線的垂足 P 
POINT perpendicular(POINT p,LINESEG l) 
{ 
double r=relation(p,l); 
POINT tp; 
tp.x=l.s.x+r*(l.e.x-l.s.x); 
tp.y=l.s.y+r*(l.e.y-l.s.y); 
return tp; 
} 
/* 求點p到線段l的最短距離,并返回線段上距該點最近的點np 
注意:np是線段l上到點p最近的點,不一定是垂足 */ 
double ptolinesegdist(POINT p,LINESEG l,POINT &np) 
{ 
double r=relation(p,l); 
if(r<0) 
{ 
np=l.s; 
return dist(p,l.s); 
} 
if(r>1) 
{ 
np=l.e; 
return dist(p,l.e); 
} 
np=perpendicular(p,l); 
return dist(p,np); 
} 

// 求點p到線段l所在直線的距離,請注意本函數與上個函數的區別 
double ptoldist(POINT p,LINESEG l) 
{ 
return abs(multiply(p,l.e,l.s))/dist(l.s,l.e); 
} 

/* 計算點到折線集的最近距離,并返回最近點. 
注意:調用的是ptolineseg()函數 */ 
double ptopointset(int vcount,POINT pointset[],POINT p,POINT &q) 
{ 
int i; 
double cd=double(INF),td; 
LINESEG l; 
POINT tq,cq; 

for(i=0;i{ 
l.s=pointset[i]; 
l.e=pointset[i+1]; 
td=ptolinesegdist(p,l,tq); 
if(td{ 
cd=td; 
cq=tq; 
} 
} 
q=cq; 
return cd; 
} 
/* 判斷圓是否在多邊形內.ptolineseg()函數的應用2 */ 
bool CircleInsidePolygon(int vcount,POINT center,double radius,POINT polygon[]
) 
{ 
POINT q; 
double d; 
q.x=0; 
q.y=0; 
d=ptopointset(vcount,polygon,center,q); 
if(dreturn true; 
else 
return false; 
} 

/* 返回兩個矢量l1和l2的夾角的余弦(-1 --- 1)注意:如果想從余弦求夾角的話,注意反
余弦函數的定義域是從 0到pi */ 
double cosine(LINESEG l1,LINESEG l2) 
{ 
return (((l1.e.x-l1.s.x)*(l2.e.x-l2.s.x) + 
(l1.e.y-l1.s.y)*(l2.e.y-l2.s.y))/(dist(l1.e,l1.s)*dist(l2.e,l2.s))) ); 
} 
// 返回線段l1與l2之間的夾角 單位:弧度 范圍(-pi,pi) 
double lsangle(LINESEG l1,LINESEG l2) 
{ 
POINT o,s,e; 
o.x=o.y=0; 
s.x=l1.e.x-l1.s.x; 
s.y=l1.e.y-l1.s.y; 
e.x=l2.e.x-l2.s.x; 
e.y=l2.e.y-l2.s.y; 
return angle(o,s,e); 
} 
// 如果線段u和v相交(包括相交在端點處)時,返回true 
bool intersect(LINESEG u,LINESEG v) 
{ 
return( (max(u.s.x,u.e.x)>=min(v.s.x,v.e.x))&& file://排斥實驗 
(max(v.s.x,v.e.x)>=min(u.s.x,u.e.x))&& 
(max(u.s.y,u.e.y)>=min(v.s.y,v.e.y))&& 
(max(v.s.y,v.e.y)>=min(u.s.y,u.e.y))&& 
(multiply(v.s,u.e,u.s)*multiply(u.e,v.e,u.s)>=0)&& file://跨立實驗 
(multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0)); 
} 


// (線段u和v相交)&&(交點不是雙方的端點) 時返回true 
bool intersect_A(LINESEG u,LINESEG v) 
{ 
return((intersect(u,v))&& 
(!online(u,v.s))&& 
(!online(u,v.e))&& 
(!online(v,u.e))&& 
(!online(v,u.s))); 
} 


// 線段v所在直線與線段u相交時返回true;方法:判斷線段u是否跨立線段v 
bool intersect_l(LINESEG u,LINESEG v) 
{ 
return multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0; 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区日韩欧美亚洲| 国产亚洲一区二区三区在线观看| 亚洲品质自拍视频网站| www.久久精品| 亚洲精品成人天堂一二三| 在线精品国精品国产尤物884a| 亚洲午夜一区二区三区| 在线91免费看| 久久er精品视频| 久久精品一二三| 91在线丨porny丨国产| 亚洲国产aⅴ成人精品无吗| 91精品久久久久久蜜臀| 久久精品99久久久| 国产精品久久久久久久久免费樱桃 | 国产欧美日韩综合| 99久久国产综合色|国产精品| 亚洲一区在线播放| 精品乱人伦小说| 91在线porny国产在线看| 午夜视频久久久久久| 26uuu国产电影一区二区| 成人18精品视频| 日韩精品免费专区| 中文字幕二三区不卡| 欧美日韩大陆一区二区| 紧缚奴在线一区二区三区| 国产精品国产a| 日韩亚洲欧美综合| 99久久精品免费看国产免费软件| 日日夜夜精品视频天天综合网| 精品国偷自产国产一区| 91视频.com| 久久国产精品无码网站| 亚洲色图20p| 精品福利一区二区三区免费视频| 色婷婷久久久亚洲一区二区三区 | 首页综合国产亚洲丝袜| 中文字幕欧美激情一区| 日韩欧美色电影| 91亚洲精品乱码久久久久久蜜桃| 狠狠色综合播放一区二区| 一区二区在线看| 国产婷婷色一区二区三区| 777午夜精品视频在线播放| 91精品国产一区二区三区蜜臀| 国产精品一二一区| 热久久国产精品| 亚洲成国产人片在线观看| 国产精品美女久久久久久| 日韩一卡二卡三卡四卡| 欧美日韩的一区二区| 91年精品国产| av亚洲产国偷v产偷v自拍| 九色|91porny| 男男视频亚洲欧美| 午夜激情久久久| 亚洲狠狠爱一区二区三区| 国产精品久久久一区麻豆最新章节| 日韩网站在线看片你懂的| 欧美精品少妇一区二区三区| 色综合久久久久久久久久久| 粉嫩一区二区三区性色av| 国产最新精品免费| 蜜桃视频一区二区| 日本午夜一区二区| 日韩电影一区二区三区四区| 午夜精彩视频在线观看不卡| 亚洲午夜精品17c| 亚洲主播在线播放| 亚洲激情中文1区| 亚洲精品免费在线观看| 亚洲精品国产视频| 亚洲精品成人在线| 亚洲不卡在线观看| 日韩1区2区日韩1区2区| 蜜臀久久99精品久久久画质超高清| 天天色综合成人网| 看电视剧不卡顿的网站| 黑人精品欧美一区二区蜜桃| 国产一区二区在线看| 丁香另类激情小说| 97se亚洲国产综合自在线| 97se亚洲国产综合在线| 91久久一区二区| 欧美亚洲国产怡红院影院| 欧美丝袜自拍制服另类| 欧美军同video69gay| 日韩视频一区在线观看| 精品福利一区二区三区| 久久久国产综合精品女国产盗摄| 国产亚洲一区二区三区四区| 国产精品少妇自拍| 一区二区在线观看视频| 亚洲18色成人| 精品一区二区在线视频| 成人国产精品免费观看动漫| 99在线精品视频| 欧美人妇做爰xxxⅹ性高电影 | 久久综合九色综合97婷婷| 欧美国产欧美亚州国产日韩mv天天看完整| 国产欧美精品一区二区色综合朱莉| 中文字幕在线观看一区| 午夜av电影一区| 国产久卡久卡久卡久卡视频精品| www.亚洲色图.com| 91精品在线免费| 国产农村妇女毛片精品久久麻豆 | 午夜国产精品影院在线观看| 久久99精品一区二区三区三区| 成人一区二区三区视频在线观看 | 欧美日韩免费高清一区色橹橹| 日韩美女视频一区二区在线观看| 久久久久国产精品人| 亚洲综合丁香婷婷六月香| 欧美日韩一区视频| 26uuu欧美| 亚洲一区视频在线| 国产成人av电影在线观看| 色噜噜偷拍精品综合在线| 日韩精品一区二区三区中文不卡| 中文字幕亚洲在| 另类综合日韩欧美亚洲| 色婷婷国产精品| 国产色产综合产在线视频| 亚洲成av人**亚洲成av**| 国产91富婆露脸刺激对白| 欧美一区二区日韩| 亚洲另类在线一区| 国产一区二区不卡老阿姨| 欧美亚日韩国产aⅴ精品中极品| 国产亚洲成aⅴ人片在线观看| 丝袜美腿亚洲色图| 9i在线看片成人免费| 精品日韩欧美在线| 首页亚洲欧美制服丝腿| 99久久久国产精品免费蜜臀| 欧美草草影院在线视频| 污片在线观看一区二区| 99久久久无码国产精品| 久久噜噜亚洲综合| 蜜桃视频免费观看一区| 欧美日韩一级二级三级| 亚洲色图色小说| 国产麻豆精品95视频| 日韩午夜激情电影| 日韩精品91亚洲二区在线观看| 91视频免费看| 国产精品理论片| 国产91露脸合集magnet| 欧美精品一区二区三区一线天视频| 亚洲成人综合视频| 欧美特级限制片免费在线观看| 亚洲欧美日韩久久精品| 99精品久久免费看蜜臀剧情介绍 | 亚洲国产精品成人综合 | 99热国产精品| 国产精品乱码久久久久久| 国产麻豆精品视频| 久久九九影视网| 国产在线视视频有精品| 精品福利av导航| 国产一区二区三区久久悠悠色av| 精品国产乱码久久久久久免费| 喷水一区二区三区| 日韩免费看网站| 经典三级视频一区| 国产欧美日韩视频一区二区| 国产成人精品三级| 中文字幕不卡在线观看| 不卡的av中国片| 一区二区三区四区在线| 欧美网站一区二区| 午夜日韩在线观看| 欧美一区二区人人喊爽| 国精产品一区一区三区mba视频 | 欧美一区二区免费视频| 免费xxxx性欧美18vr| 日韩欧美视频在线| 国产精品亚洲人在线观看| 国产精品久久久久久久久免费樱桃 | 国产精品网站在线| 91蜜桃网址入口| 亚洲第一二三四区| 精品成人免费观看| 成人18精品视频| 婷婷综合在线观看| 337p日本欧洲亚洲大胆色噜噜| 国产成人一级电影| 亚洲免费色视频| 91精品国产综合久久福利软件 | 麻豆精品国产91久久久久久| 日韩一级黄色大片| 成人激情小说乱人伦| 亚洲国产成人porn| 久久久精品人体av艺术| 色94色欧美sute亚洲线路一ni| 丝袜亚洲另类丝袜在线| 久久精品这里都是精品| 欧美伊人久久久久久久久影院|