有向線段的左右側界定

2021-06-22 17:59:54 字數 1025 閱讀 4430

向量積的定義為:詳見維基百科:

「叉積可以定義為:

在這裡θ表示

假如兩個向量是在座標軸平面內,比如xy軸平面內,那麼這兩個向量積的方向即為z軸,或者正向,或者負向。沿著向量的方向界定左側和右側,乙個向量與其左側向量的叉積和與其右側向量的叉積是反向的。我們可以利用這一特點來判斷一條有向線段在另一條有向線段的左側還是右側。在這之前我們需要明確觀察平面,因為左右方向還跟觀察的方向有關。以xy軸平面為例,

(1)xy軸平面的觀察平面可以為:如下圖所示,其向外是z軸正向。記為dir=0;此時,向量積跟z軸正向同向為左側,反向為右側。

// o .--------------------->y

//     |

//     |

//     |

//    \ /

//    x

(2)xy軸平面的觀察平面也可以為:如下圖所示,其向裡是z軸正向。記為dir=1;此時,向量積跟z軸正向同向為右側,反向為左側。

// o .--------------------->x

//     |

//     |

//     |

//    \ /

//    y

其演算法實現如下:

#define  leftside_   0 //左側

#define rightside_ 1 //右側

#define inline_ 3 //共線或者平行

int whichside(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,bool dir)//判斷點3指向點4的向量在點1指向點2的向量的哪側

else if(ab>0)

else //dir=1

}else if(ab<0)

else //dir=1

}return side;

}



判斷某一點在直線的左右側的演算法

判斷某一點在直線左右側 左右方向是相對前進方向的,只要指定了前進方向就可以知道左右 比如指定前進方向是從直線的起點到終點 判斷點在直線的左側還是右側是計算幾何裡面的乙個最基本演算法,使用向量來判斷。定義 平面上的三點p1 x1,y1 p2 x2,y2 p3 x3,y3 的面積量 s p1,p2,p3...

有向連通分量的Tarjan演算法

演算法偽 描述 tarjan root 1 初始化 def low,map 2 stack root 將 root 節點入棧 3 對 與 root 相連的每個 節點 p 如果 p 在 stack 中 那麼 low root min low root def p 並且 call tarjan p 4 ...

初學unity,關於解決有向勻速運動的問題

在專案中,可能會遇到迅速任意方向的運動需求,要解決勻速運動大家可能會首先想到vector3.lerp和unity 的itween外掛程式來解決,但是真正使用之後,你就會發現vector3.lerp和itween外掛程式路徑演算法並不是你需要的效果,在目標點轉換的時候使用這兩個方法並不會勻速,兩點間的...