Найти координаты между двумя точками, используя sql - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть два столбца: столбец X и столбец Y. (X1, Y1) = (1,2) и (X2, Y2) = (9,10).Рассматривая X1, Y1 в качестве начальной точки и X2, Y2 в качестве конечных точек, я могу найти наклон.Но используя наклон и эти точки.Как найти оставшиеся точки между ними

Например: у меня есть значения типа

ColumnX  ColumnY
1         1
.         .
.         .
.         .
10        10

Наклон Y1-Y2 / X1-X2 То есть 10-1 / 10-1 = 1

Используя наклон и координаты, Как найти оставшиеся 9 координат между ними, используя Sql

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Вот решение , дайте мне знать, если оно работает для вас

declare @x1 as decimal(10,2)
declare @y1 as decimal(10,2)
declare @x2 as decimal(10,2)
declare @y2 as decimal(10,2)

set @x1=1
set @y1=1
set @x2=10
set @y2=10


declare @mytab as table (x decimal(10,2),y decimal(10,2))

insert into @mytab values(@x1,@y1),(@x2,@y2)




declare @slope as decimal(10,2)
set @slope=(@y1-@y2)/(@x1-@x2)

--(y2=y1+s*(x2-x1)
;with cte as(
select @x1 x, @y1 y 
union all
select cast(x+1 as decimal(10,2)),cast( @y1+@slope*(x+1.0-@x1) as decimal(10,2)) from cte
where x+1 < 11)
select x,y from cte
0 голосов
/ 26 апреля 2019

Я не до конца понимаю, как выглядят ваши входные данные, но вы можете сгенерировать точки, используя рекурсивный CTE:

with points as (
      select 1 as x_start, 2 as y_start, 9 as x_end, 10 as y_end
     ),
     cte as (
      select x_start as x, convert(float(53), y_start) as y, 9 as x_end, convert(float(53), (y_end - y_start) * 1.0 / (x_end - x_start)) as slope
      from points
      union all
      select x + 1, y + slope, x_end, slope
      from cte
      where x < x_end
     )
select *
from cte
order by x;

Здесь - это db <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...