0
我有2 THREE.Vector3()
s。三個js圓偏角(旋轉點)
我想畫一個circle
圍繞一個矢量,並使用第二個矢量作爲切線。
我有圓弧幾何的半徑是向量之間的距離。
我怎樣才能旋轉圈觸摸第二個向量?
我怎樣才能獲得弧度的圓(赤緯)旋轉?
我可以使用三種框架功能還是需要使用數學方法?
(我希望它應該是3D框架的一些核心功能)。
我有2 THREE.Vector3()
s。三個js圓偏角(旋轉點)
我想畫一個circle
圍繞一個矢量,並使用第二個矢量作爲切線。
我有圓弧幾何的半徑是向量之間的距離。
我怎樣才能旋轉圈觸摸第二個向量?
我怎樣才能獲得弧度的圓(赤緯)旋轉?
我可以使用三種框架功能還是需要使用數學方法?
(我希望它應該是3D框架的一些核心功能)。
在3D矢量圖形是4x4 homogenous transform matrices
void glCircle3D(double *pos,double *nor,double r,bool _fill)
{
int i,n=36;
double a,da=divide(pi2,n),p[3],dp[3],x[3],y[3];
// set x to something not parallel to normal vector
if (fabs(nor[0]-nor[1])>1e-6) vector_ld(x,nor[1],nor[0],nor[2]);
else if (fabs(nor[0]-nor[2])>1e-6) vector_ld(x,nor[2],nor[1],nor[0]);
else if (fabs(nor[1]-nor[2])>1e-6) vector_ld(x,nor[0],nor[2],nor[1]);
else vector_ld(x,1.0,0.0,0.0);
vector_mul(x,x,nor); // x=cross(x,nor)
vector_mul(y,x,nor); // y=cross(x,nor)
vector_len(x,x,r); // x=r*x/|x| ... r is scalar
vector_len(y,y,r); // y=r*y/|y| ... r is scalar
if (_fill)
{
glBegin(GL_TRIANGLE_FAN);
glVertex3dv(pos);
}
else glBegin(GL_LINE_STRIP);
for (a=0.0,i=0;i<=n;i++,a+=da)
{
vector_mul(dp,x,cos(a)); vector_add(p,pos,dp);
vector_mul(dp,y,sin(a)); vector_add(p,p ,dp);
glVertex3dv(p);
}
glEnd();
}
nor
是圓正常(你的情況第二向量)pos
是圓中心位置(在你的情況0,0,0 )r
是半徑(在你的情況下你的第一個向量大小)x,y
載體系統nor
定義正交座標如果要構造變換矩陣然後只複製的x,y,也沒有,POS於矩陣的適當字段atan2
或acos(dot(v1,v2))
需要vector_ld(a,x,y,z)
一個[] = {X,Y,Z}vector_mul(a,b,c)
編寫功能的[] = B [] XC []vector_mul(a,b,c)
一個[] = b [] * Cvector_add(a,b,c)
一個[] = b [] + C []vector_sub(a,b,c)
一個[] = b [] - C []vector_len(a,b,c)
a [] = b [] * c/| b [] |p=pos+x*cos(alpha)+y*sin(alpha);
r
裏面已經x,y
基向量所以沒有必要通過將其乘以
什麼是你不知道的硬件計算角度或不知道的問題如何計算旋轉?你也使用變換矩陣還是自己變換座標?另請參閱[glCircle3D](http://stackoverflow.com/a/25182327/2521214)它可能會幫助 – Spektre
我要求正確的方法。我可以在三角形上使用測角公式,但是我問三維是否可以通過某個函數來完成它,例如getAngle(a,b,c)等等...... 將pythagoras formules寫入js源代碼是無效的。 – Martin