MySQL 是一種關系型數據庫管理系統,可以極大地簡化數據的存儲、訪問、管理以及修改等操作。本文將介紹在 MySQL 中如何通過兩條線段求其交點。
CREATE TABLE IF NOT EXISTS `line` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x1` double NOT NULL, `y1` double NOT NULL, `x2` double NOT NULL, `y2` double NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; INSERT INTO `line` (`x1`, `y1`, `x2`, `y2`) VALUES (1, 1, 3, 3), (3, 3, 4, 4);
上面的代碼創建了一張名為 line 的數據庫表,并插入了兩條線段的坐標值。接下來可以使用 SQL 查詢語句來計算這兩條線段的交點。
SELECT ((l2.y2-l2.y1)*l1.x2-(l2.x2-l2.x1)*l1.y2+(l2.x2*l2.y1-l2.y2*l2.x1))/ ((l2.y2-l2.y1)*(l1.x2-l1.x1)-(l2.x2-l2.x1)*(l1.y2-l1.y1)) AS x, ((l1.y1-l1.y2)*l2.x1-(l1.x1-l1.x2)*l2.y1+(l1.x1*l1.y2-l1.y1*l1.x2))/ ((l2.y2-l2.y1)*(l1.x2-l1.x1)-(l2.x2-l2.x1)*(l1.y2-l1.y1)) AS y FROM line l1, line l2 WHERE ((l1.y1-l1.y2)*(l2.x2-l2.x1)-(l1.x1-l1.x2)*(l2.y2-l2.y1))!=0 AND ((l2.y2-l2.y1)*(l1.x2-l1.x1)-(l2.x2-l2.x1)*(l1.y2-l1.y1))!=0 AND ((l1.x1-l1.x2)*(l2.y2-l2.y1)-(l1.y1-l1.y2)*(l2.x2-l2.x1)!=0) AND ((l1.x1-l1.x2)*(l2.y1-l1.y1)-(l1.y1-l1.y2)*(l2.x1-l1.x1))/(l2.y2-l2.y1)/(l2.x2-l2.x1)=(l1.y1-l1.y2)/(l1.x1-l1.x2) AND ((l1.x1-l1.x2)*(l2.y2-l1.y1)-(l1.y1-l1.y2)*(l2.x2-l1.x1))/(l2.y2-l2.y1)/(l2.x2-l2.x1)=(l1.y1-l1.y2)/(l1.x1-l1.x2);
上面的代碼可以計算出兩條線段的交點的 x 坐標和 y 坐標。
上一篇mysql 兩次左連接