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

Тема в разделе "SQL", создана пользователем TT., 8 сен 2006.

Статус темы:
Закрыта.
  1. TT.

    TT. Гость

    Таблица 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-х строк одной таблицы.
     
  2. TT.

    TT. Гость

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

    Код (Text):
    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
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей