我正在研究C++中的一個問題,我需要確定以3d(等,x.y.z座標)中的2點表示的線與斷開點之間的角度。以下是一些可能更容易理解的圖片。在3D中計算直線和點之間的角度
This is in 2D to display it easier
所以我需要的是找到這個角度
我一直在尋找了幾個小時,現在要解決這方面的幫助,我懷疑,我只是一直無緣一些明顯的事但是,如果任何人都可以幫我這個我會很感激:)
我正在研究C++中的一個問題,我需要確定以3d(等,x.y.z座標)中的2點表示的線與斷開點之間的角度。以下是一些可能更容易理解的圖片。在3D中計算直線和點之間的角度
This is in 2D to display it easier
所以我需要的是找到這個角度
我一直在尋找了幾個小時,現在要解決這方面的幫助,我懷疑,我只是一直無緣一些明顯的事但是,如果任何人都可以幫我這個我會很感激:)
讓說你有A(X ,Y ,Z )B(X ,Y ,Z )C(X ,Y ,Z )和共同的一點是B.因此,線AB變爲方程:(x1-x2)i + (y1-y2)j + (z1-z2)k
並且對於BC,它是:(x2-x3)i + (y2-y3)j + (z2-z3)k
COS theta
= (AB.BC)/(|AB|*|BC|)
下面是代碼
#include<iostream>
#include<math.h>
#define PI 3.14159265
using namespace std;
int main()
{
int x1,x2,x3,y1,y2,y3,z1,z2,z3;
cout<<"for the first\n";
cin>>x1>>y1>>z1;
cout<<"\nfor the second\n";
cin>>x2>>y2>>z2;
cout<<"\nfor the third\n";
cin>>x3>>y3>>z3;
float dot_product = (x1-x2)*(x2-x3) + (y1-y2)*(y2-y3)+ (z1-z2)*(z2-z3);
float mod_denom1 = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2));
float mod_denom2 = sqrt((x2-x3)*(x2-x3) + (y2-y3)*(y2-y3) + (z2-z3)*(z2-z3));
float cosnum = (dot_product/((mod_denom1)*(mod_denom2)));
float cos = acos(cosnum)*180/PI;
cout<< cos;
}
只有當有人能告訴我什麼是錯的。 –
不要自己定義「PI」!它已經在math.h中,使用'M_PI' –
,使用等於'x1-x2','x2-x3'等的中間值也會更好 - 您的代碼非常容易複製 - 膏體錯誤。 –
gamma = acos((asq + bsq - csq)/2/sqrt(asq*bsq))
其中asq
和bsq
是頂點,其他兩個點之間的距離平方和csq
是這兩點之間的平方距離。
(從Wikipedia繪製)
爲什麼downvote?這正是使用的方法。 OP仍然需要從原始座標計算'asq','bsq','csq',但這很簡單。 –
您有2個向量,第一相關在3D和行和在3D的點的其它載體連接端點到線。
爲了計算角度矢量theta
2之間,可以採取的我從here複製的事實,即V1.V2 = |V1| x |V2| x consine(theta)
這裏是代碼段的優勢,來計算點積。
#include<numeric>
int main() {
double V1[] = {1, 2, 3}; // vector direction i.e. point P2 - point P1
double V2[] = {4, 5, 6}; // vector direction i.e. point P3 - point P2
std::cout << "The scalar product is: "
<< std::inner_product(begin(V1), end(V1), begin(V2), 0.0);
// TODO: Get theta
return 0;
}
一旦你有了點積,將它除以2個矢量的大小,然後採取反餘弦得到theta。
idk誰downvoting。不是我。這種方法也適用。 –
建議張貼圖片,而不是直接鏈接到imgUrl的 –
你聽說過math.stackexchange.com?那就是你想要去的地方。示例:http://math.stackexchange.com/questions/413482/angle-between-different-rays-3d-line-segments-and-computing-their-angular-rela和http://math.stackexchange.com/問題/ 463415/angle-between-two-3d-lines這裏我們討論編程。 – 4386427
計算幾何是數學和編程之間的一個灰色區域。請放下你的高馬。 –