2014-01-05 65 views
1

讓我們考慮(x,y)是一個點,然後做一個radius的一些值r。如果假設我有一個點(a,b),我需要檢查(a,b)是否在以(x,y)爲中心的圓內。點存在於圓圈

如何在SQL Server中實現此目的?

+5

(XA)^ 2 +( yb)^ 2 <= r^2 –

+4

這個問題是數學,而不是編程 –

+1

@CharlesBretana他正在問一個SQL查詢,因爲他沒有提供任何他自己嘗試過的東西, –

回答

4

測試數據

DECLARE @t TABLE (x NUMERIC(10,2), y NUMERIC(10,2), radius NUMERIC(10,2)) 
INSERT INTO @t 
VALUES (3.5,3.5, 5.5),(20.5,20.5, 10.5), (30.5,30.5, 20.5) 

查詢

DECLARE @p1 NUMERIC(10,2) = 5.5 --<-- Point to check 
DECLARE @p2 NUMERIC(10,2) = 5.5 


SELECT *, CASE WHEN POWER(@p1 - x, 2) + POWER(@p2 - y, 2) <= POWER(radius, 2) 
      THEN 'Inside The Circle' 
      WHEN POWER(@p1 - x, 2) + POWER(@p2 - y, 2) > POWER(radius, 2) 
      THEN 'Outside the Circle' END [Inside/Outside] 
FROM @t 

結果集

╔═══════╦═══════╦════════╦════════════════════╗ 
║ x ║ y ║ radius ║ Inside/Outside ║ 
╠═══════╬═══════╬════════╬════════════════════╣ 
║ 3.50 ║ 3.50 ║ 5.50 ║ Inside The Circle ║ 
║ 20.50 ║ 20.50 ║ 10.50 ║ Outside the Circle ║ 
║ 30.50 ║ 30.50 ║ 20.50 ║ Outside the Circle ║ 
╚═══════╩═══════╩════════╩════════════════════╝ 

隨着問題被關閉,再也噸添加其他的回答,所以我編輯此使用SQL Server Geometry類型爲包括溶液... [使用如上相同的數據點,加上一個精確演示圓上]

Declare @t TABLE 
    (x NUMERIC(10,2), y NUMERIC(10,2), 
    radius NUMERIC(10,2)) 
Insert @t 
Values (3.5,3.5, 5.5),(20.5,20.5, 10.5), 
     (30.5,30.5, 20.5), (-5.5, 5.5, 11.0) 

-- -------------------------- 
Declare @pX float = 5.5  
Declare @pY float = 5.5 
Declare @c geometry; 
Declare @p geometry; 
Select x, y, radius, 
     (geometry::Point(X, Y, 0)).STDistance(geometry::Point(@pX, @pY, 0)) 
From @T 
Where (geometry::Point(X, Y, 0)).STDistance(geometry::Point(@pX, @pY, 0)) > radius 
+0

謝謝,工作正常。 –

+0

沒有問題很高興它幫助:) –

+0

@CharlesBrentana乾杯朋友從來沒有見過你的編輯,直到現在:)我從來沒有在SQL服務器中使用這些'幾何類型',絕對值得了解。 –