Я бы подошел к этому, сохранив все области с приоритетом, а затем получая стоимость на пиксельной основе.
Таким образом, стоимость одного пикселя будет:
select c.*
from costs c
where PIXELX between c.x and c.x + c.deltax and PIXELY between c.y + c.deltay
order by priority desc
limit 1
Чтобы распространить эту область пикселей, вы бы расширить область в набор пикселей. Я рекомендовал бы в numbers
таблицу, чтобы помочь с этим:
select x.num as x, y.num as y
from numbers x cross join
numbers y
where x.num between PIXELX and PIXELX and DELTAX and
y.num between PIXELY and PIXELY and DELTAY
Теперь объединить эти идеи, чтобы получить все возможные затраты для данного пикселя:
select x.num as x, y.num as y, max(priority) as maxpriority
from numbers x cross join
numbers y join
costs c
on x.num between c.x and c.x + c.deltax and y.num between c.y + c.deltay
where x.value between PIXELX and PIXELX and DELTAX and
y.value between PIXELY and PIXELY and DELTAY
group by x.num, y.num
Наконец, присоединиться затраты в для данного приоритет:
select sum(c.cost)
from (select x.num as x, y.num as y, max(priority) as maxpriority
from numbers x cross join
numbers y join
costs c
on x.num between c.x and c.x + c.deltax and y.num between c.y + c.deltay
where x.value between PIXELX and PIXELX and DELTAX and
y.value between PIXELY and PIXELY and DELTAY
group by x.num, y.num
) xyp join
costs c
on xyp.x between c.x and c.x + c.deltax and xyp.y between c.y + c.deltay and
xyp.maxpriority = c.priority
Почему предыдущая зона разбита на 4 части? – dbf
больше математического вопроса, чем программирования – 2013-04-15 20:54:10
+1. , , Мне кажется, что это очень интересный вопрос в базе данных. –