三維幾何 平面

2021-08-29 22:38:36 字數 2519 閱讀 6444

平面的表示

通常用點法式(p0,n)來描述乙個平面。其中點p0是平面的乙個點,向量n是平面的法向量。每個平面把空間分成了兩個部分,我們可以用點法式表示其中乙個半空間。具體是哪乙個呢?是這個法向量所背離的那乙個(即法向量指向遠離半空間的方向)。

既然是法向量,n就垂直於平面上的所有直線。換句話說,平面上的任意點p滿足dot(n,p-p0)=0.

設點p的座標為(x,y,z),p0的座標為(x0,y0,z0),向量n的座標表示為(a,b,c),上述等式等價於

a(x-x0) + b(y-y0) + c(z-z0) = 0

ax+by+cz+d=0.

注意,當ax+by+cz+d>0時,上述點積大於0,即點(x,y,z)在半空間(p0,n)外。換句話說,ax+by+cz+d>0 表示的是乙個半空間(half space),a,b,c,d乘-1得到翻轉後的平面。

平面: ax + by + cz = d

//平面 ax+by+cz=d

struct plane

;

過定點垂直於定直線的平面。平面的法向量就是這條直線,所以可以直接寫出所求平面的點法式。

直線與平面的夾角、兩平面的夾角、兩直線的夾角。注意到與平面的夾角可以轉化為與法向量的夾角。兩平面的夾角等於這兩個平面的法線的夾角。

點到平面的距離。把向量p-p0投影到向量n上可得:p到平面的有向距離為dot(p-p0,n)/length(n)。這是乙個相當簡潔的結論。如果n是單位向量,甚至會更簡單。

點p到平面p0-n的距離。n必須為單位向量

double distancetoplane(const point3 &p, const point3 &p0, const vector3 &n)

-點到平面的投影

有了距離,投影點本身就不難求了。設點p在平面(p0,n)上的投影為p',則p'-p=dn,其中d就是p到平面的有向距離。

點p到平面p0-n的距離。n必須為單位向量

注意此處的小技巧,求d的時候沒有取絕對值。因為不確定p的位置。

point3 getplaneprojection(const point3 &p, const point3 &p0, const vector3 &n)

直線與平面的交點。可以簡單的通過解方程得到。設平面方程為dot(n,p-p0)=0,過點p1和p2的直線的引數方程為p=p1+t(p2-p1)

則與平面方程聯立解得:

t=dot(n,p0-p1) / dot(n,p2-p1)

其中分母為0的情況對應於直線與平面平行,或者直線在平面上,如何區分?只要判斷p1或者p2是否在平面上即可。

直線p1-p2到平面p0-n的交點。假定交點唯一存在

point3 lineplaneintersection(const point3 &p1,const point3 &p2, const point3 &p0, const vector3 &n)

順便提一下:如果平面用一般式ax+by+cz+d = 0,則聯立解出的表示式為:

t= (ax1 + by1 + cz1 + d) / (a(x1-x2) + b(y1-y2) +c(z1-z2))

過不共線三點的平面。法向量為cross(p2-p0,p1-p0),任取乙個點即可得到平面的點法式。

平面的旋轉。旋轉到水平平面,即法向量為(0,0,sqrt(a*a + b*b +c*c))

首先繞z軸旋轉,得到(0, sqrt(a*a + b*b), c) 然後繞x軸旋轉 ,得到法向量(0,0,sqrt(a*a + b*b +c*c))

對點做旋轉

繞z軸旋** x' = xcosc - ysinc; y' = xsinc + ycosc; z' = z

繞x軸旋**x' = x;y' = ycosa - zsina; z' =ysina + zcosa

繞y軸旋** x' = zsinb + xcosb, y' = y; z' = zcosb - xsinb

其中角度為平面法向量逆時針旋轉的角度,就等於平面上的點(一般對向量做旋轉,即點與原點相連形成的向量)所旋轉的角度。通過公式就可以得到旋轉後的點了。

void rotation(point3 *p, int n, const plane &p)

//繞x軸旋轉

c = sqrt(b*b + p.c*p.c);

cosc = p.c / c;

sinc = b / c;

for(i = 0; i < n; i++)

}

三維幾何 基礎

數學上,三維幾何是3維歐式空間幾何的傳統名稱。因為實際上這大致就是我們生活的空間。我們在前面介紹過向量運算,其中很多內容也適合三維幾何,如點 向量 點,向量 向量 向量,點 點沒有定義。首先是輔助巨集的定義 const double eps 1e 10 const double pi acos 1 ...

三維計算幾何模版

網上找了乙個三維計算幾何模版,完善了一下,使它能使用了.include include include using namespace std 基礎 const double eps 0.000001 typedef struct point 3d bool operator const point...

ACM計算幾何 三維幾何模板

三維幾何函式庫 include define eps 1e 8 define zero x x 0?x x eps vlen xmult subt p,s.b subt p,s.c eps vlen xmult subt p,s.c subt p,s.a eps int dot inplane ex...