본문 바로가기
프로그래밍/TSQL

[SQL][GEOMETRY][MATH] 좌표 벡터 기반 이동

by 정리 습관(★arranging★) 2021. 7. 1.
728x90


해결과제. 두점이 주어지고 한점을 다른점 방향으로 특정 거리만큼 이동하고 싶은 문제

뇌피셜로 해결 : 기준 좌표에 좌표간의 차이를 기존 거리 대비 이동하고싶은 거리로 곱한만큼 가산하여 도출 

평면 좌표 상의 벡터방향 이동 좌표 계산

SQL 표준 수학 함수 조회 (ex. SQRL)

검출 단계
1. 두 좌표간의 거리 구하기 : 피타고라스 정의
2. 벡터의 개념을 활용하여 좌표 변경 위치 도출
3. 검출된 위치를 기준으로 거리 검수

주요 코드 부분 및 결과 화면

--거리 구하기
SET @DIST = SQRT(POWER(@X2-@X1,2)+POWER(@Y2-@Y1,2))
--이동좌표 구하기 구하기
SET @X3 = @X1+3.3*((@X2-@X1)/@DIST)
SET @Y3 = @Y1+3.3*((@Y2-@Y1)/@DIST)

3.3 은 제가 쓰는 변수 값이고 이동할 만큼의 거리입니다.

이동거리 만큼의 계산


함께알면 좋은 정보 : mssql에서 float를 동적으로 문자열로 생성

2021.01.06 - [프로그래밍/TSQL] - [MSSQL] FLOAT를 문자열로 바꾸기

MSSQL 함수로 개발하여 사용하였습니다.
@MV 를 이동 거리로 생각하시면 됩니다. 3.3을 곱한건 제가 쓰고있는 특수한 환경에 의해 가산한것입니다.
아래 코드 활용시 이동 거리부분은 기본 좌표계에 따라 다르게 설정하셔야합니다.

ALTER FUNCTION [dbo].[FN_UtilMoveDistance](
	@X1	FLOAT,
	@Y1	FLOAT,
	@X2	FLOAT,
	@Y2	FLOAT,
	@MV FLOAT

)RETURNS GEOMETRY
AS
BEGIN

	DECLARE @DIST FLOAT,@X3 FLOAT,@Y3 FLOAT
	
	SET @DIST = SQRT(POWER(@X2-@X1,2)+POWER(@Y2-@Y1,2))
	SET @X3 = @X1+3.3*@MV*((@X2-@X1)/@DIST)
	SET @Y3 = @Y1+3.3*@MV*((@Y2-@Y1)/@DIST)	

	RETURN GEOMETRY::STGeomFromText('POINT('+CONVERT(VARCHAR(20),CONVERT(NUMERIC(30),@X3))+' '++CONVERT(VARCHAR(20),CONVERT(NUMERIC(30),@Y3))+')',0)
END
	


To move one point in a planar coordinate system in the direction of another point.
(How to move a distance in the direction of one point?)
Calculate the reference coordinates by multiplying the difference between the coordinates by the proportion of distance you want to move.
(Derived by multiplying the difference between the coordinates by the distance desired to travel compared to the existing distance.)

댓글