利用向量計算快速判定一點在直線的哪一側

2021-08-07 11:49:15 字數 2460 閱讀 8878

很實用的一片判斷點與直線關係的文章,**:

這個例子是用來說明向量運算可以快速判定一點在直線的哪一側。

如上圖所示,直線是從pa到pb的直線ab。下面的工作是構建乙個方法,來判斷某點在這條直線ab的左下側還是右上側。

如上圖所示,pc點就在直線ab的右上側,而pd點就在直線ab的左下側。

這裡要用向量運算來解決這個問題,所以需要用到2d空間的向量類,這個類:vector_2d.as在此處" href="" style="margin:0px; padding:0px; color:rgb(128,0,0)" rel="noopener noreferrer">可以找見。

下面用的vector_2d類都指的是這個向量類,每個vector_2d類例項的方法都是這個類中已有的方法。

注:這裡的向量指的是數學或物理上的向量,不是cs4中的vector,它也叫向量。當然有很多東西可以在邏輯上表示為向量,例如rgb顏色。

首先定義四個向量物件來記錄四個位置(pa,pb,pc,pd四個點)

//定義四個點向量來記錄四個點的相應位置

private var _a_v:vector_2d = new vector_2d(196,123);

private var _b_v:vector_2d = new vector_2d(370,230);

private var _c_v:vector_2d = new vector_2d(422,112);

private var _d_v:vector_2d = new vector_2d(159,296);

接著定義點pa到點pc的向量,如上圖pa到pc的箭頭所示:

private var _ac_v:vector_2d = null;

定義點pb到點pc的向量,如上圖pb到pc的箭頭所示:

private var _bc_v:vector_2d = null;

定義點pa到點pd的向量,如上圖pa到pd的箭頭所示:

private var _ad_v:vector_2d = null;

定義點pb到點pd的向量,如上圖pb到pd的箭頭所示:

private var _bd_v:vector_2d = null;

接下來計算出_ab_v, _bc_v, _bd_v這三個向量:

//_c_v減去_a_v 就可以計算出點pa到點pc的向量

_ac_v = _c_v.minusnew(_a_v);

//_c_v減去_b_v 就可以計算出點pb到點pc的向量

_bc_v = _c_v.minusnew(_b_v);

//_d_v減去_a_v 就可以計算出點pa到點pd的向量

_ad_v = _d_v.minusnew(_a_v);

//_d_v減去_b_v 就可以計算出點pb到點pd的向量

_bd_v = _d_v.minusnew(_b_v);

現在來做乙個測試,需要用到向量叉乘,即vector_2d類的cross(...)方法。

這裡簡要介紹一下叉乘。對於2d向量的叉乘最後得到的一定是乙個數字,它可能大於零,可能等於零,也可能小於零

如果兩個向量的方向夾角是180度/0度的時候,它們的叉乘值一定是等於零(當然在計算機中可能是 0.0001),對應的數學公式為a x b = |a|*|b|*sin(angle)

一定要記住叉乘不遵循交換律。

例如向量a×向量b=向量c

設想向量a沿小於180度的角度轉向向量b

將右手的四指指向向量a的方向,右手的四指彎曲代表上述旋轉方向,則伸直的拇指指向它們的叉乘得到的向量c

如上圖所示,利用vector_2d類,可以計算出_ac_v 與_bc_v 的叉乘結果

var crossnum:number = _ac_v.cross(_bc_v);

得到的 crossnum是小於零的。

同理_ad_v 與_bd_v 的叉乘結果是:

crossnum = _ad_v.cross(_bd_v);

crossnum大於零。

繼續推測,得到乙個方法:

對於任意乙個點p,建立向量tp_v來記錄這個點的座標,算出 點pa到點p的向量ta_v 和 點pb到點p的向量tb_v,再計算出這兩個向量的叉乘

crossnum = ta_v.cross(tb_v);(不能寫成 tb_v.cross(ta_v) )

if(crossnum < 0)else

演示**如下:

package

/**//**

* 系統程式初始化入口

*/private function init():void

/**//**

* 初始化非顯示物件

*/private function initobj():voidelse

} }}

python利用向量計算點到面的距離

該鏈結是利用向量計算點到面的距離的原理 coding utf 8 import numpy as np import pandas as pd def pointtoarea point1,point2,point3,point4 描述 point4到point1,point2,point3所在面的...

稀疏向量計算優化小結

在各種演算法中,向量計算是最經常使用的一種操作之中的乙個。傳統的向量計算,學過中學數學的同學也能明確怎麼做。但在如今的大資料環境下。資料一般都會比較稀疏,因此稀疏向量的計算,跟普通向量計算。還是存在一些不同。首先,我們定義兩個向量 a x1,x2,xn b y1,y 2,yn 定義a b的點積為a ...

幾何向量 計算光線折射refract向量

其實光線除了反射現象外,還有折射現象,打個比方,你看水塘中魚兒游動,表面上看起來魚兒很貼近水面,同時也感覺水底很淺,結果一腳捅下去,直接沒到大腿了,這就是光的折射產生的一種視覺欺騙。光線折射的產生,其實是因為光線通過不同介質所產生的 偏折 現象。ps 光線的 偏折 現象實際上和光的粒子性有關,這裡我...