日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算几何学习小记

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算几何学习小记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
  • 正題
    • 平面運算
        • 加減
        • 乘積
      • 常見問題
        • 直線/線段規范交點
        • 求垂線/點問題
        • 判斷點在多邊形的內/外
        • 求兩個圓的交點

前言

因為懶得畫圖理解計算幾何所以要來這里鼓勵一下自己
以后新學的應該也會寫在這里。就當我是水博客
應該都是二維的計算幾何,三維的有生之年再學
公式用的不規范,感性理解的


正題


平面運算

定義兩個向量a?=(xa,ya),b?=(xb,yb)\vec{a}=(x_a,y_a),\vec{b}=(x_b,y_b)a=(xa?,ya?),b=(xb?,yb?)
下方為了方便不一定會加→\rightarrow

加減

向量加法遵循平行四邊形定則,a?+b?=c?\vec a+\vec b=\vec ca+b=c
滿足xc=xa+xb,yc=ya+ybx_c=x_a+x_b,y_c=y_a+y_bxc?=xa?+xb?,yc?=ya?+yb?
向量減法遵循三角形定則,a??b?=c?\vec a-\vec b=\vec ca?b=c
滿足xc=xa?xb,yc=ya?ybx_c=x_a-x_b,y_c=y_a-y_bxc?=xa??xb?,yc?=ya??yb?
圖里a?b?\vec{a-b}a?b?的方向反了/kk

乘積

定義∣a∣|a|a表示aaa的模長,表示向量aaa的無向長度,而aaa的模定義為有向長度
定義a?ba*ba?b表示aaabbb點積,是bbb投影到aaa上的向量模乘上向量aaa的模。實數a?b=xaxb+yayba*b=x_ax_b+y_ay_ba?b=xa?xb?+ya?yb?

(為了清楚我將紅色線下移了一格),點積就是紅色的長度乘上藍色的長度

一般的時候點積用于判斷兩條直線的正反,如果兩條直線方向相同則點積為正否則為負。

定義a×ba\times ba×b表示aaabbb叉積,是向量a,ba,ba,b圍成的平行四邊形的有向面積。實數a×b=xayb?xbyaa\times b=x_ay_b-x_by_aa×b=xa?yb??xb?ya?

如圖所示的平行四邊形的有向面積就是a×ba\times ba×b
一般用于求多邊形的面積或者判斷一條直線在另一條直線的左側還是右側。

常見問題

直線/線段規范交點

詢問兩條直線a:(sa,ta)a:(s_a,t_a)a:(sa?,ta?)b:(sb,tb)b:(s_b,t_b)b:(sb?,tb?)交點時(我們用向量形式表示點坐標,再以直線上兩個點表示直線)。
考慮使用面積法

如圖,我們使用叉積計算由直線aaa分開的兩個三角形的面積S1,S2S1,S2S1,S2
那么SO:OT=S1:S2SO:OT=S1:S2SO:OT=S1:S2然后我們又知道STSTST的線段信息就可以求出點坐標OOO的位置。

如果詢問的是線段與直線的,我們加上一個叉積判斷線段是否在直線的兩端即可。

如果詢問線段與線段的,我們就直接分別把兩條線視為直線/線段進行上面的判斷即可。

求垂線/點問題

給出直線lll和直線外一點PPP求它與直線lll的垂點/線

考慮點積

因為SP??ST?=SO?ST\vec{SP}*\vec{ST}=SO*STSP?ST=SO?ST然后除以ST2ST^2ST2我們就可以得到SO:STSO:STSO:ST然后縮短STSTST一定距離就可以得到OOO點了。

當然如果只是求垂線長度的話直接用面積法也行。

判斷點在多邊形的內/外

第一種方法就是射線法,該點隨機向一個方向射線,如果與奇數條邊相交則在內,否則在外。當然這種可能會遇到的包括但不限于以下神奇情況

當然聽大佬說遇到這種情況重新換個方向拉射線就好了(?
特點是運算快,精度高但是特殊情況較多

第二種方法是轉角法,該點開始的射線依次轉過多邊形的每個頂點,如果轉回來之后經過了一個圈,那么就在多邊形內,否則不在

特點是比較通用

求兩個圓的交點


根據余弦定理我們有CB2=AC2+AB2?2AC?AB?cos∠CABCB^2=AC^2+AB^2-2AC*AB*cos\angle CABCB2=AC2+AB2?2AC?AB?cosCAB
解出cos∠CABcos\angle CABcosCAB然后用atan2atan2atan2函數算出級角再算出方位角即可


待更新懶得更新了,計算幾何爬出OI

總結

以上是生活随笔為你收集整理的计算几何学习小记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。