Можно ли сделать это при помощи запоса Sql?

  • Автор темы TT.
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

TT.

Гость
#1
Таблица 1.
----------------
| ID | .... |
----------------
| 1 | .... |
----------------

Таблица 2.
-------------------------------------------------------------------
| ID | X | Y | PointNum (порядковый номер точки) |
-------------------------------------------------------------------
| 1 | 10 | 10 | 0 |
| 1 | 10 | 20 | 1 |
| 1 | 20 | 20 | 2 |
| 1 | 20 | 10 | 3 |
--------------------------

Вывел формулу попадания случайной точки в многоугольник.

min(y2,y1)+|(y1-y2)/(x2-x0)|>=y0 - если вот таких совподений четное колличество, тогда случайная точка попадает в многоугольник

(x0, y0) - это координаты случайной точки
(x1, y1) - это координаты начала одного из отрезков многоугольника
(x2, y2) - это координатыконца одного из отрезков многоугольника

Например для объекта 1:
(10, 10) - (10, 20) первый отрезок
(10, 20) - (20, 20) второй отрезок
(20, 20) - (20, 10) третий отрезок
(20, 10) - (10, 10) четвертый отрезок

Проблемма в том что надо подставлять в формулу значения 2-х строк одной таблицы.
 
T

TT.

Гость
#2
Первая таблица называется objects вторая poligons

Код:
select objects.id from objects where 
MOD(
(
select count(*) from poligons as p1 where (p1.id=objects.id and
LEAST(p1.X,(select X from poligons as p2 where p2.id=p1.id and p2.PointNum=p1.PointNum+1))<=30 and
GREATEST(p1.X,(select X from poligons as p2 where p2.id=p1.id and p2.PointNum=p1.PointNum+1))>=30 and 
p1.PointNum+1<(select count(*) from poligons where id=p1.id) and
LEAST(p1.Y,(select Y from poligons as p2 where p2.id=p1.id and p2.PointNum=p1.PointNum+1))+
ABS(
(p1.Y-(select Y from poligons as p2 where p2.id=p1.id and p2.PointNum=p1.PointNum+1))
/
((select X from poligons as p2 where p2.id=p1.id and p2.PointNum=p1.PointNum+1)-30))>=15)or
(p1.id=objects.id and
LEAST(p1.X,(select X from poligons as p2 where p2.id=p1.id and p2.PointNum=0))<=30 and
GREATEST(p1.X,(select X from poligons as p2 where p2.id=p1.id and p2.PointNum=0))>=30 and 
p1.PointNum+1=(select count(*) from poligons where id=p1.id) and
LEAST(p1.Y,(select Y from poligons as p2 where p2.id=p1.id and p2.PointNum=0))+
ABS(
(p1.Y-(select Y from poligons as p2 where p2.id=p1.id and p2.PointNum=0))
/
((select X from poligons as p2 where p2.id=p1.id and p2.PointNum=0)-30))>=15)
),2)=1

group by objects.id
 
Статус
Закрыто для дальнейших ответов.