空間直線與平面的交點

這內容屬于計算幾何,在 3D游戲開發編程基礎 或者在游戲開發中的數學和物理算法?這種資料上也可以找到相關的內容和代碼。或者更廣泛點稱為是計算機圖形學,

? ? ? 接下來我們進入正題,如果直線不與平面平行,將存在交點。如下圖所示,已知直線L過點m(m1,m2,m3),且方向向量為VL(v1,v2,v3),平面P過點n(n1,n2,n3),且法線方向向量為VP(vp1,vp2,vp3),

求得直線與平面的交點O的坐標(x,y,z):

? ? ? ?將直線方程寫成參數方程形式,即有:

  x = m1+ v1 * ty = m2+ v2 * t               (1)式z = m3+ v3 * t

? ? ? ?將平面方程寫成點法式方程形式,即有:

  vp1 * (x – n1) + vp2 * (y – n2) + vp3 * (z – n3) = 0             (2)式

? ? ? ?則直線與平面的交點一定滿足式(1)式和(2)式,聯立兩式,求得:

    t = ((n1 – m1)*vp1+(n2 – m2)*vp2+(n3 – m3)*vp3) / (vp1* v1+ vp2* v2+ vp3* v3)              (3)式

? ? ? 如果(3)式中分母(vp1* v1+ vp2* v2+ vp3* v3)為0,則表示直線與平面平行,即直線與平面沒有交點。求解出t后,然后將t代入式(1)即可求得交點O的坐標(x,y,z)。定義一個求直線與平面交點坐標的函數CalPlaneLineIntersectPoint(),

其代碼如下:

 1 /// <summary>
 2 /// 求一條直線與平面的交點
 3 /// </summary>
 4 /// <param name="planeVector">平面的法線向量,長度為3</param>
 5 /// <param name="planePoint">平面經過的一點坐標,長度為3</param>
 6 /// <param name="lineVector">直線的方向向量,長度為3</param>
 7 /// <param name="linePoint">直線經過的一點坐標,長度為3</param>
 8 /// <returns>返回交點坐標,長度為3</returns>
 9 
10 private float[] CalPlaneLineIntersectPoint(float[] planeVector, float[] planePoint, float[] lineVector, float[] linePoint)
11 {
12     float[] returnResult = new float[3];
13     float vp1, vp2, vp3, n1, n2, n3, v1, v2, v3, m1, m2, m3, t,vpt;
14     vp1 = planeVector[0];
15     vp2 = planeVector[1];
16     vp3 = planeVector[2];
17     n1 = planePoint[0];
18     n2 = planePoint[1];
19     n3 = planePoint[2];
20     v1 = lineVector[0];
21     v2 = lineVector[1];
22     v3 = lineVector[2];
23     m1 = linePoint[0];
24     m2 = linePoint[1];
25     m3 = linePoint[2];
26     vpt = v1 * vp1 + v2 * vp2 + v3 * vp3;
27     //首先判斷直線是否與平面平行
28     if (vpt == 0)
29     {
30         returnResult = null;
31     }
32     else
33     {
34         t = ((n1 - m1) * vp1 + (n2 - m2) * vp2 + (n3 - m3) * vp3) / vpt;
35         returnResult[0] = m1 + v1 * t;
36         returnResult[1] = m2 + v2 * t;
37         returnResult[2] = m3 + v3 * t;
38     }
39     return returnResult;
40 }
41                     

?

參考了:http://m.blog.csdn.net/article/details?id=6688080

轉載于:https://www.cnblogs.com/www-caiyin-com/p/6758548.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455884.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iphone導出視頻 無法連接到設備_拷貝iphone照片,顯示無法連接設備?TRIZ 3秒鐘解決...

手機存儲滿了&#xff0c;想把手機里面的照片和視頻拷貝出來。 又不想交給蘋果cloud的“蘋果稅”。USB手動連上IPHONE&#xff0c;結果每次復制了幾百兆&#xff0c;就會彈出“無法連接設備”&#xff0c;導致拷貝失敗。并且每次重新連接之后&#xff0c;刪掉的照片又出現在手機…

【Python基礎入門系列】第07天:Python 數據結構--序列

python內置序列類型最常見的是列表&#xff0c;元組和字符串。&#xff08;序列是python中最基礎的數據結構&#xff0c;而數據結構是計算機存儲&#xff0c;組織數據的方式。&#xff09; 另外還提供了字典和集合的數據結構&#xff0c;但他們屬于無順序的數據集合體&#xf…

Css顏色和文本字體

Css顏色,文本字體 css顏色表示法 顏色名表示&#xff0c;比如&#xff1a;red 紅色&#xff0c;gold 金色16進制數值表示&#xff0c;比如&#xff1a;#ff0000 表示紅色&#xff0c;這種可以簡寫成 #f00RGB顏色: 紅(R)、綠(G)、藍(B)三個顏色通道的變化 background-color: r…

springBoot(20):使用Spring Session實現集群-redis

一、session集群的解決方案1.1、擴展指定server利用Servlet容器提供的插件功能&#xff0c;自定義HttpSession的創建和管理策略&#xff0c;并通過配置的方式替換掉默認的策略。缺點&#xff1a;耦合Tomcat/Jetty等Servlet容器&#xff0c;不能隨意更換容器。1.2、利用Filter利…

docker desktop ubuntu鏡像_原創 | Docker入門,看了不理解,假一賠命

寫在前面這篇博客適合誰&#xff1f;對于Docker并不了解&#xff0c;只是有一點模糊的感覺&#xff0c;覺得Docker可以當成虛擬機用之類的只是下載了Docker軟件&#xff0c;對于怎么配置&#xff0c;怎么玩&#xff0c;第一步干什么&#xff0c;完全一無所知其二&#xff0c;我…

Windows - Windows下安裝MSI程序遇到2503和2502錯誤

三個步驟可以解決這個問題&#xff1a; 1&#xff09; 以管理員身份開啟命令行模式并鍵入msiexec /package <msi文件路徑> 2&#xff09; 修改組策略 計算機配置 ->> 管理模板 ->> Windows組件 ->> Windows Installer ->> 始終以提升的權限進行安…

如何確定h.264的碼率

A:如何確定h.264的碼率&#xff1f; 碼率 編碼產生的總比特數 * 幀頻 / 編碼總幀數碼率控制機制就是使編碼器編碼產生的碼流盡量符合你設定的碼率。從上面的公式可以看出&#xff0c;當編碼幀數和幀頻確定后&#xff0c;碼率控制要做的就是控制編碼產生的比特數。 A:我現在想…

【Python基礎入門系列】第08天:Python List

Python內置的一種數據類型是列表&#xff1a;list。list是一種有序的集合&#xff0c;可以隨時添加和刪除其中的元素。 LIST 列表 比如&#xff0c;列出班里所有同學的名字&#xff0c;就可以用一個list表示&#xff1a; >>> classmates [liuwang, xuezhang, al…

金屬磁記憶傳感器封裝

金屬磁記憶傳感器封裝 摘 要 通過分析壓力傳感器和FBG傳感器的結構,針對金屬磁記憶傳感器自身特點,結合井下作業要求,提出了金屬磁記憶傳感器的封裝設計原則;根據該原則,設計出了一種金屬磁記憶傳感器的封裝結構,并對其進行了有限元模擬分析;對封裝后的金屬磁記憶傳感器實物進…

【Python基礎入門系列】第09天:Python tuple

Python 中的數據結構是通過某種方式組織在一起的數據元素的集合&#xff0c;這些數據元素可以是數字、字符、甚至可以是其他數據結構 在 Python 中&#xff0c;最基本的數據結構是序列&#xff08;在前面文章我們也說過序列&#xff09;&#xff0c;序列中的每個元素都有一個序…

黑客攻防:關于工業網絡安全的那些事

1、概述 隨著工業信息化的快速發展以及工業4.0時代的到來&#xff0c;工業化與信息化的融合趨勢越來越明顯&#xff0c;工業控制系統也在利用最新的計算機網絡技術來提高系統間的集成、互聯以及信息化管理水平。未來為了提高生產效率和效益&#xff0c;工控網絡會越來越開放&am…

elementui table某一列是否顯示_Vue項目引進ElementUI組件的方法

環境要求NodejsNodejs官網下載地址&#xff1a;http://nodejs.cn/download/具體安裝參考其他資料打開cmd命令行&#xff0c;輸入npm -v&#xff0c;如果出現如下圖的顯示&#xff0c;說明已經安裝正確。如果安裝版本比較老&#xff0c;想升級新版本npm install npm -g安裝 webp…

Entry

Entry&#xff08;單行輸入框&#xff09;用于獲取用戶輸入的文本。 Entry組件僅允許輸入一行文本&#xff0c;如果輸入過長&#xff0c;那么內容將被滾動&#xff0c;意味著字符串不能被全部看到。 1 from tkinter import *2 3 master Tk()4 5 e Entry(master)6 e.pack(padx…

集成電路版圖與工藝課程設計之用CMOS實現Y=AB+C電路與版圖

1 緒論 1.1 設計背景 集成電路設計&#xff08;Integrated circuit design, IC design&#xff09;&#xff0c;亦可稱之為超大規模集成電路設計&#xff08;VLSI design&#xff09;&#xff0c;是指以集成電路、超大規模集成電路為目標的設計流程。集成電路設計涉及對電子器…

關于H264通過RTP傳輸的打包方式

Q:現在小弟初次嘗試H264的編碼通過RTP方式傳輸&#xff0c;具體實驗環境的問題如下&#xff1a;環境&#xff1a;服務器端&#xff0c;H264的幀數據&#xff08;可能超過64k&#xff09;&#xff0c;分成N個1460字節的包&#xff0c;然后加上RTP頭發送。客戶端&#xff0c;VLC播…

AngualrJS之服務器端通信

譯自《AngularJS》 與服務器通信 目前&#xff0c;我們已經接觸過下面要談的主題的主要內容&#xff0c;這些內容包括你的Angular應用如何規劃設計、不同的angularjs部件如何裝配在一起并正常工作以及AngularJS中的模板代碼運行機制的一小部分內容。把它們結合在一起&#xff0…

硬盤顯示容量和實際容量不符合_買移動固態硬盤糾結大半天?花2分鐘看完這篇,購買時不再被坑...

如今移動硬盤已成為很多辦公用戶標配的物品&#xff0c;縱觀整個移動硬盤市場&#xff0c;主要有移動機械硬盤和移動固態硬盤兩種類型&#xff0c;前者容量大&#xff0c;價格較親民&#xff1b;而后者具備了輕薄、讀寫速度快、耐振動不怕摔等優點。不少追求高效率的用戶&#…

【Python基礎入門系列】第10天:Python 類與對象

首先&#xff0c;我已經假定你是個萌新或已經看了無數遍的垃圾文章&#xff0c;然后依然搞不懂類和對象&#xff0c;但是呢起碼知道有類和對象這么兩個玩意兒&#xff0c;我覺得有必要找一篇生動形象的示例來講解。 由于你可能沒有編程經驗&#xff0c; 所以無法從學過的編程…

數字電子技術課程設計之基于觸發器的三位二進制同步減法計數器無效態000/110

基于觸發器的三位二進制同步減法計數器無效態000/110 1 課程設計的目的與作用 掌握用multisim 的電路仿真程序 熟悉同步計數器工作原理和邏輯功能 熟悉計數器電路的分析和設計方法 掌握161 芯片集聯成任意進制同步加法計數器 2 設計任務 三位二進制減法計數器&#xff08;無…

SUSE11 搭建iscsi target 配置

https://www.suse.com/documentation/sles11/stor_admin/data/sec_inst_system_iscsi_target.html#sec_inst_system_iscsi_target_manual https://www.novell.com/support/kb/doc.php?id7001308 http://scst.sourceforge.net/comparison.html轉載于:https://www.cnblogs.com/b…