已知四個點的座標為:[0,0],[0,1],[1,1],[1,0],判斷它們能不能組成乙個矩形
分析 : 至少有三個內角都是直角的四邊形是矩形,有乙個內角是直角的平行四邊形是矩形,對角線相等的平行四邊形是矩形。矩形是一種特殊的平行四邊形,正方形是特殊的矩形。矩形也叫長方形。
如圖所示,如果a、b、c、d四點構成矩形的話,那麼△abc、△bcd就是直角三角形,ac=bd,ad=bc,只要求證ab²+ac²=bc²即可。
根據勾股定理,a²+b²=c²
接下來直接上**,這裡是在thinkphp裡面測試
把點的座標換成[0,0],[0,1],[1,1],[1,0],又可以組成矩形了;
這裡需要注意的是,開根號計算出來的值,都是浮點型資料,所以不能直接用==進行比較,因為會引起錯誤,我們必須用到php的bc高精度函式來進行比較。還有就是不是所有的數都可以用浮點數精確表示,如3.333 二進位制表示1*2^1+1*2^0+0*2^(-1)+1*2^(-2)...。記憶體中儲存的僅是真實值得近似值,有精度誤差的。浮點數精度不同。即使在精度相同的情況下,比較也可能會出問題。因為在運算過程中會將記憶體(或快取記憶體)中的值載入到cpu浮點暫存器(80 bit擴充套件精度)中,然後再進入cpu浮點計算單元進行計算,計算結果寫回浮點暫存器,然後寫回記憶體(或快取記憶體)。從記憶體到浮點暫存器,浮點數的精度會擴充套件,從浮點暫存器到記憶體,浮點數的精度會降低(精度擴充套件通常沒問題,但如果精度降低了,很可能值會發生變化,出現截斷),而浮點運算的結果由於下面還要使用所以暫時儲存在浮點暫存器中留待下次使用(沒有及時寫回記憶體,這是一種優化策略),從而導致資料並不是記憶體中和記憶體中的資料比較而是浮點暫存器中的值和記憶體中的值進行比較,而無論記憶體中是float型別還是double型別,其精度和浮點暫存器精度都不相同,從而導致比較結果是不相等。
原創 已知四個座標點求其兩條直線交點座標
判斷第乙個點 與 第四個點所連直線 與 第2個點和第3個點 所連直線的交點 是否在 第2個和第3個點的線段上 function getcrosspoint point1,point2,point3,point4 判斷 隨機產生的點 和點x 的連線 與地圖上已知的兩點 給出的座標中連續的兩點 之間的連...
計算OBB四個頂點的座標
obb 的結構如下 obb 的中心 public var center vbvector obb 的x軸 public var x vbvector obb 的y軸 public var y vbvector 半寬,相對於obb的座標系 public var halfwidth number 半高,...
根據座標點判斷兩個矩形是否重疊
方法一 2個矩形相交,一定有交叉線的,所以用下面的方法,可以求出是否相交,並且可以確定相交的位置 假定矩形是用一對點表達的 minx,miny maxx,maxy 那麼兩個矩形rect1,rect2 相交的結果一定是個矩形,構成這個相交矩形rect的點對座標是 minx max minx1,minx...