国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

計(jì)算幾何公式(點(diǎn)到直線距離,點(diǎn)到線段距離等)

這篇具有很好參考價(jià)值的文章主要介紹了計(jì)算幾何公式(點(diǎn)到直線距離,點(diǎn)到線段距離等)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

參照學(xué)校大佬的模板整理出文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-622228.html

定義

const double eps=1e-18;
//記錄點(diǎn)的橫縱坐標(biāo)
struct Pot{
	double x,y;
};
//記錄線段的起始點(diǎn)和終點(diǎn)
struct Line{
	Pot st,ed;
};
//記錄圓的圓心和半徑
struct Circle{
	Pot p;
	double r;
};

判斷小數(shù)大小和正負(fù)

//判斷小數(shù)的正負(fù),如果絕對(duì)值小于精度就返回0,小于0就返回-1,否則返回1
int sign(double x){
	if(fabs(x)<eps)return 0;
	if(x<0)return -1;
	return 1;
}
//比較小數(shù)的大小,如果x-y小于精度那么認(rèn)為他們相等,如果x<y就返回-1,x大于y就返回1
int dcmp(double x,double y){
	if(fabs(x-y)<eps)return 0;
	if(x<y)return -1;
	return 1;
}

兩個(gè)點(diǎn)的坐標(biāo)加減乘除運(yùn)算

Pot operator + (Pot a,Pot b){
	return {(a.x+b.x),(a.y +b.y )};
}
//兩個(gè)點(diǎn)相減的坐標(biāo)
Pot operator - (Pot a,Pot b){
	return {(a.x -b.x ),(a.y -b.y )};
}
//判斷兩個(gè)點(diǎn)是否坐標(biāo)相等
bool operator == (Pot a,Pot b){
	if(dcmp(a.x,b.x)==0&&dcmp(a.y,b.y)==0)return 1;
	return 0;
}

兩個(gè)向量運(yùn)算


//求一個(gè)向量長(zhǎng)度乘c之后的向量
Pot operator * (Pot a,double c){
	return {(a.x*c),(a.y *c)};
}
//求一個(gè)向量除以c之后的向量
Pot operator / (Pot a,double c){
	return {(a.x/c),(a.y /c)};
}
//向量a在向量b上的投影與b長(zhǎng)度的乘積
//a*b=|a||b|cos(c)
double dot(Pot a,Pot b){
	return a.x*b.x+a.y *b.y  ;
}
//向量a與b張成的平行四邊形的有向面積,b在a的逆時(shí)針?lè)较驗(yàn)檎?/span>
//a*b=|a||b|sin(c)
double cross(Pot a,Pot b){
	return a.x *b.y -b.x *a.y ;
}

點(diǎn)到點(diǎn)的距離

//a到原點(diǎn)的距離
double get_length(Pot a){
	return sqrt(dot(a,a));
}
//點(diǎn)a和點(diǎn)b之間的距離
double dist(Pot a,Pot b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

點(diǎn)到線的距離

//點(diǎn)p到直線ab的距離
double dist_to_line(Pot p,Pot a,Pot b){
	Pot v1=b-a,v2=p-a;
	return fabs(cross(v1,v2)/get_length(v1));
}
//點(diǎn)p到線段ab的距離
double dist_to_seg(Pot p,Pot a,Pot b){
	if(a==b)return get_length(p-a);
	Pot v1=b-a,v2=p-a,v3=p-b;
	if(sign(dot(v1,v2))<0)return get_length(v2);
	if(sign(dot(v1,v3))>0)return get_length(v3);
	return dist_to_line(p,a,b);
}

兩直線交點(diǎn),判斷線段是否相交

//求兩直線的交點(diǎn),v為p的向量,w為q的向量
Pot get_Line_inter(Pot p,Pot v,Pot q,Pot w){
	Pot u=p-q;
	double t=cross(w,u)/cross(v,w);
	return p+v*t;
}
//判斷兩線段是否相交
bool xiangjiao(Pot a1,Pot a2,Pot b1,Pot b2){
	double c1=cross(a2-a1,b1-a1),c2=cross(a2-a1,b2-a1);
	double c3=cross(b2-b1,a2-b1),c4=cross(b2-b1,a1-b1);
	return sign(c1)*sign(c2)<=0&&sign(c3)*sign(c4)<=0;
}

返回點(diǎn)aob形成的角的角度

//返回角aOb的角度,返回的是弧度
double get_angle(Pot a,Pot b){
	return acos(dot(a,b)/get_length(a)/get_length(b));
}

已知三點(diǎn)坐標(biāo)求形成的三角形面積

//返回三個(gè)點(diǎn)構(gòu)成的三角形面積的兩倍
double area(Pot a,Pot b,Pot c){
	return cross(b-a,c-a);
}

已知三條邊長(zhǎng)求三角形面積

//三條邊長(zhǎng)求三角形面積
double helen(double a,double b,double c){
	double p=(a+b+c)/2;
	return sqrt(p*(p-a)*(p-b)*(p-c));
}

一個(gè)點(diǎn)繞原點(diǎn)順時(shí)針旋轉(zhuǎn)x度

//返回三個(gè)點(diǎn)構(gòu)成的三角形面積的兩倍
double area(Pot a,Pot b,Pot c){
	return cross(b-a,c-a);
}

判斷點(diǎn)是否在線段上

//判斷點(diǎn)p是否在線段ab上
bool on_seg(Pot p,Pot a,Pot b){
	return sign(cross(p-a,p-b))==0&&sign(dot(p-a,p-b))<=0;
}

n個(gè)點(diǎn)組成的多邊形的面積

//n個(gè)點(diǎn)從0到n-1求多邊形面積
double Polygon_area(Pot p[],int n){
	double s=0;
	for(int i=1;i+1<n;i++){
		s+=cross(p[i]-p[0],p[i+1]-p[i]);
	}
	return s/2;
}

點(diǎn)在直線上的投影

//點(diǎn)p在直線ab上的投影
Pot get_line_pro(Pot p,Pot a,Pot b){
	Pot v=b-a;
	return a+v*(dot(v,p-a)/dot(v,v));
}




到了這里,關(guān)于計(jì)算幾何公式(點(diǎn)到直線距離,點(diǎn)到線段距離等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 空間解析幾何 | 向量、數(shù)量積、向量積、混合積、距離公式

    空間解析幾何 | 向量、數(shù)量積、向量積、混合積、距離公式

    ? ?注: 通過(guò)公式我們可以發(fā)現(xiàn),兩個(gè)向量的 數(shù)量積 就是一個(gè) 數(shù)量 。 數(shù)量積 又稱為 點(diǎn)積 或者 內(nèi)積 。 ex: 在直角坐標(biāo)系 {O; i , j , k } 中,設(shè) α = (a1, a2, a3), β = (b1, b2, b3), ? ? α ? β = (a1 i +?a2 j +?a3 k ) ? ?(b1 i +?b2 j +?b3 k ) = a1b1 + a2b2 + a3b3 ?? 即兩向量的數(shù)量積之和等于它

    2023年04月09日
    瀏覽(23)
  • Python-opencv計(jì)算兩條直線或者線段角度

    Python-opencv計(jì)算兩條直線或者線段角度

    通過(guò)斜率關(guān)系計(jì)算,公式如下圖: 需注意在求斜率時(shí)不要出現(xiàn)豎直情況,python計(jì)算會(huì)報(bào)錯(cuò),但按理說(shuō)應(yīng)該可以計(jì)算出無(wú)窮的,此處先放這吧,等后期有時(shí)間再來(lái)解釋這里原因。 通過(guò)余弦定理計(jì)算三點(diǎn)角度: 若三邊為a,b,c ,則如圖所示,在△ABC中: 使用前提:分母不要有

    2024年02月15日
    瀏覽(17)
  • 使用opencv計(jì)算圖片上任意一點(diǎn)到圖片中心點(diǎn)距離為半徑繪制圓形,計(jì)算FOV

    使用opencv計(jì)算圖片上任意一點(diǎn)到圖片中心點(diǎn)距離為半徑繪制圓形,計(jì)算FOV

    一、計(jì)算公式 圖片坐標(biāo):Point(x,y) 半徑 :r = ( x ? i m a g e . c o l s / 2 ) 2 + ( y ? i m a g e . r o w s / 2 ) 2 sqrt {(x - image.cols/2)^2 + (y - image.rows/2)^2} ( x ? ima g e . co l s /2 ) 2 + ( y ? ima g e . ro w s /2 ) 2 ? 二、以 R R R 為半徑在圖像上繪制圓形,如下圖所示: 三、實(shí)現(xiàn)代碼

    2024年01月16日
    瀏覽(22)
  • 兩空間線段最短距離計(jì)算

    兩空間線段最短距離計(jì)算

    ? ? ? ?本文中向量 叉乘用 x 表示 點(diǎn)乘用 * 表示 ? ? ? 見(jiàn)上圖,假設(shè)兩線段分別為PQ和ST,線段UV為其最短距離所在的直線上,UV的長(zhǎng)度為兩線段間的最短距離。 ? ? ?先獲取兩線段PQ及ST的法向量 PUB=PQ x ST(叉乘) ? ? ?再計(jì)算d=PUB*UV(點(diǎn)積)來(lái)判斷兩線段(所在直線)是否共

    2024年02月16日
    瀏覽(16)
  • 【Python】計(jì)算幾何:德勞內(nèi)三角剖分算法 | 利用 scatter 繪制散點(diǎn)圖 | 實(shí)現(xiàn)外接圓生成 | scipy庫(kù)的 Dealunay 函數(shù) | 實(shí)戰(zhàn): A-B間歐氏距離計(jì)算

    【Python】計(jì)算幾何:德勞內(nèi)三角剖分算法 | 利用 scatter 繪制散點(diǎn)圖 | 實(shí)現(xiàn)外接圓生成 | scipy庫(kù)的 Dealunay 函數(shù) | 實(shí)戰(zhàn): A-B間歐氏距離計(jì)算

    ?? 猛戳!跟哥們一起玩蛇啊? ???《一起玩蛇》?? ?? 寫(xiě)在前面 :本章我們將介紹的是計(jì)算機(jī)和領(lǐng)域的 Delaunay 三角剖分算法(即德勞內(nèi)三角剖分),它是一種用于將點(diǎn)集劃分成三角形網(wǎng)格的算法。點(diǎn)集的三角剖分屬于計(jì)算幾何學(xué)科范疇,對(duì)數(shù)值分析、有限元分析與圖形學(xué)

    2024年02月02日
    瀏覽(37)
  • 【計(jì)算幾何】Python:德勞內(nèi)三角剖分算法 | 利用 scatter 繪制散點(diǎn)圖 | 實(shí)現(xiàn)外接圓生成 | scipy庫(kù)的 Dealunay 函數(shù) | 實(shí)戰(zhàn): A-B間歐氏距離計(jì)算

    【計(jì)算幾何】Python:德勞內(nèi)三角剖分算法 | 利用 scatter 繪制散點(diǎn)圖 | 實(shí)現(xiàn)外接圓生成 | scipy庫(kù)的 Dealunay 函數(shù) | 實(shí)戰(zhàn): A-B間歐氏距離計(jì)算

    ?? 猛戳!跟哥們一起玩蛇啊? ???《一起玩蛇》?? ?? 寫(xiě)在前面 :本章我們將介紹的是計(jì)算機(jī)和領(lǐng)域的 Delaunay 三角剖分算法(即德勞內(nèi)三角剖分),它是一種用于將點(diǎn)集劃分成三角形網(wǎng)格的算法。點(diǎn)集的三角剖分屬于計(jì)算幾何學(xué)科范疇,對(duì)數(shù)值分析、有限元分析與圖形學(xué)

    2024年02月03日
    瀏覽(32)
  • 【計(jì)算幾何】判斷一條線段和一段圓弧是否相交 & C++代碼實(shí)現(xiàn)

    【計(jì)算幾何】判斷一條線段和一段圓弧是否相交 & C++代碼實(shí)現(xiàn)

    最近做項(xiàng)目,需要判斷一條線段是否和一段圓弧相交,網(wǎng)上也沒(méi)找到很好的解答(最主要是沒(méi)有直接可以搬來(lái)用的代碼,或者思路寫(xiě)得太過(guò)高深,我看不懂),于是決定自己想一個(gè)方法,寫(xiě)一個(gè)博客,將實(shí)現(xiàn)思路和完整代碼都分享出來(lái) 線段可用兩個(gè)點(diǎn)表示,點(diǎn)的對(duì)象如下所示

    2024年02月01日
    瀏覽(93)
  • 根據(jù)經(jīng)緯度計(jì)算地球上兩點(diǎn)之間的距離——Haversine公式介紹及計(jì)算步驟

    根據(jù)經(jīng)緯度計(jì)算地球上兩點(diǎn)之間的距離——Haversine公式介紹及計(jì)算步驟

    目錄 摘要 1.半正矢公式(Haversine Formula)介紹 2.半正矢公式應(yīng)用 3.半正矢公式計(jì)算 3.1 主要思路 3.2 計(jì)算步驟 3.2.1 平面向量計(jì)算方法 3.2.2 空間向量計(jì)算方法 寫(xiě)本文的出發(fā)點(diǎn)是需要在Qlik中根據(jù)經(jīng)緯度計(jì)算地球上兩點(diǎn)間的距離。我在社區(qū)上搜到了相關(guān)公式的分享,這個(gè)公式叫做

    2023年04月10日
    瀏覽(18)
  • PCL 點(diǎn)到三角形的距離(3D)

    PCL 點(diǎn)到三角形的距離(3D)

    給定三角形ABC和點(diǎn)P,設(shè)Q為描述ABC上離P最近的點(diǎn)。求Q的一個(gè)方法:如果P在ABC內(nèi),那么P的正交投影點(diǎn)就是離P最近的點(diǎn)Q。如果P投影在ABC之外,最近的點(diǎn)則必須位于它的一條邊上。在這種情況下,Q可以通過(guò)計(jì)算線段AB、BC和CA中離P最近的點(diǎn),并返回離P最近的計(jì)算點(diǎn)來(lái)獲得。雖然

    2024年04月11日
    瀏覽(23)
  • 空間分析實(shí)戰(zhàn)指南:點(diǎn)到多邊形的最短距離

    在我們最近的項(xiàng)目中,出現(xiàn)了一個(gè)新的需求:需要驗(yàn)證現(xiàn)場(chǎng)拍攝的照片的經(jīng)緯度與實(shí)際地塊之間的最短距離,以確保業(yè)務(wù)員在地塊的一公里范圍內(nèi)進(jìn)行拍照。 實(shí)現(xiàn)這個(gè)功能有兩種方式,一種是在前臺(tái)APP中校驗(yàn),一種是在后臺(tái)進(jìn)行校驗(yàn),接下來(lái)我會(huì)分別介紹這兩種方式。 在我

    2024年02月13日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包