Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
Добрый день,

есть набор координат, описывающие прямоугольные объекты в базе,

необходимо выбрать максимальные по y2 y3..т.е. исключить случаи когда фигура накладывается одна на другую,

координаты хранятся след образом:

id,x1,y1,x2,y2,x3,y3,x4,y4
INSERT INTO @koor
SELECT 1,0,0,0,5,5,5,5,0
UNION
SELECT 2,0,0,0,3,2,3,2,0
UNION
SELECT 3,6,0,6,4,8,4,8,0

К сообщению приложен файл. Размер - 2Kb
2 сен 14, 10:40    [16522363]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Тока одно не понятно... сколько кординат у вас описывают ваши прямоугольники то ???
Ето просто координаты 4х вершин или как ?
Если ли случаи когда фигура не начинаеться на оси ???
2 сен 14, 10:51    [16522407]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
Maxx,

да, это координаты 4 вершин, не на оси не может быть
2 сен 14, 10:56    [16522430]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Есть же специальный тип данных - geometry.
Со специальными методами как "когда фигура накладывается одна на другую".
2 сен 14, 11:08    [16522471]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
Glory,


знаю, но тут нужен алгоритм, пробовал несколько способов - срабатывало только на конкретном наборе данных, при введении доп фигур все ломалось...щас думаю куда копать
2 сен 14, 11:11    [16522483]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
sansanich1
но тут нужен алгоритм,

В смысле ?
Отфильтровать фигуры, которые покрываются другими фигурами.
Оставшиеся отсоритровать по y2,y3
2 сен 14, 11:18    [16522521]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
Glory,


вот и я хочу узнать) скорее всего уперся где-то
2 сен 14, 11:29    [16522587]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
sansanich1
вот и я хочу узнать) скорее всего уперся где-то

Еще раз
Есть же специальный тип данных - geometry.
Со специальными методами для определения "взаимодействия" фигур между собой
Например, http://msdn.microsoft.com/ru-ru/library/bb933817.aspx
2 сен 14, 11:33    [16522606]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
sansanich1
Glory,


вот и я хочу узнать) скорее всего уперся где-то

Тестовые данные ваши и ваш алгоритм в студию
2 сен 14, 11:34    [16522607]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @koor table (id int,x1 int,y1 int,x2 int,y2 int,x3 int,y3 int,x4 int,y4 int)
INSERT INTO @koor
SELECT 1,0,0,0,5,5,5,5,0
UNION 
SELECT 2,0,0,0,3,2,3,2,0
UNION
SELECT 3,6,0,6,4,8,4,8,0 

select * from @koor k
where not exists(select * from @koor
where k.id<> id 
and (k.x1 between x1 and x4  and k.y2 between  y1 and y2
   or k.x4 between x1 and x4  and k.y3 between  y1 and y2)
)
2 сен 14, 11:36    [16522618]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
LexusR,


решал так, добавим
union
SELECT 4,3,0,3,7,7,7,7,0 - поломается
2 сен 14, 11:53    [16522712]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
sansanich1
union
SELECT 4,3,0,3,7,7,7,7,0 - поломается

И какой результат то должен получиться при добавлении этой записи ?
2 сен 14, 12:11    [16522807]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
sansanich1
Member

Откуда:
Сообщений: 32
Glory,

Y=5,7,4

получается, что закрывается одна точка первой фигуры(id=1), но остается видимой, закрывается точка фигуры id=3, но край остается видимым.
2 сен 14, 12:18    [16522843]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
Glory
Member

Откуда:
Сообщений: 104760
sansanich1
Y=5,7,4

Не понял - это 3 записи с одним полем, или три поля в одной записи ?
2 сен 14, 12:25    [16522869]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
я так понимаю что с добавлением 4 записи на выходе не должно быть ни одной записи ???
2 сен 14, 12:29    [16522885]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
что мы ищем покрывающие всё фигуры или торчащие вершины ????
2 сен 14, 12:32    [16522909]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @koor table (id int,x1 int,y1 int,x2 int,y2 int,x3 int,y3 int,x4 int,y4 int)
INSERT INTO @koor
SELECT 1,0,0,0,5,5,5,5,0
UNION 
SELECT 2,0,0,0,3,2,3,2,0
UNION
SELECT 3,6,0,6,4,8,4,8,0 
UNION
SELECT 4,3,0,3,7,7,7,7,0 

select k.y2 from @koor k
where not exists(select * from @koor
where k.id<> id 
and (k.y2 < y2 and k.x2 between x1 and x4 )
and (k.y3 < y3 and k.x3 between x1 and x4 )
)
2 сен 14, 12:39    [16522956]     Ответить | Цитировать Сообщить модератору
 Re: выборка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
select k.y2 from @koor k
where not exists(select * from @koor where k.id<> id 
and (k.y2 < y2 and k.x2 between x1 and x4 and k.x3 between x1 and x4 ))
2 сен 14, 13:10    [16523150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить