|
Модераторы: skyboy |
|
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
Программа реализована на C++ Builder + MS Access + ADO.
Имеется таблица, два поля которой - коодинаты X, Y. Надо получить набор данных в ADOQuery, в которых точка (X,Y) попадает в многоугольник, заданный точками (P[0].x, P[0].y)...(P[n].x, P[n].y). В обычном случае, алгоритм попадания точки в многоугольник выглядит так:
Я не могу придумать, как мне эту функцию засунуть в запрос. Может надо использовать хранимые процедуры? Но я с ними не работала. Это вообще возможно реализовать? Помогите, пожалуйста. |
|||
|
||||
Frees |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 2 Всего: 54 |
Добавлено через 3 минуты и 2 секунды чет я седне не внимательный... многоугольник с прямоугольником перепутал.. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
А вербально описать можете? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Akina, пускает луч из точки, считает пересечение с отрезками полигона, если нечетное, значит внутри.
задачка простенькая, вспомить бы школьную математику. йеххх. Это сообщение отредактировал(а) Zloxa - 7.10.2010, 15:13 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
В общем както так, если не накосячил в формулах координат пересечения отрезков
здесь poly - иммитирует таблицу отрезков многоугольника ,point - иммитирует таблицу точек, которые мы хотим проверить. Луч пускаю в сторону точки (0,0). Потому ограничение - точка не может быть в начале координат Соответственно длинна отрезка тоже не должна быть равной нулю и параллельно лучу, будет деление на ноль. Перевести на акцесс, думаю вполне возможно. если решите взятьза основу - Тестировать тщательно. Таки переживаю что накосячил в расчете. Это сообщение отредактировал(а) Zloxa - 7.10.2010, 16:44 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
Прямо не ожидала, что так быстро ответят.
Спасибо большое Завтра буду пробовать применить. |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
KateL, для акцесса этот запрос надо будет несколько переработать.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
greatest(val1,val2) => IIF(val1>val2;val1;val2) least(val1,val2) => IIF(val1<val2;val1;val2) mod(count(*),2) = 1 => (count(*) MOD 2) = 1 остальное вроде совместимо. Это сообщение отредактировал(а) Akina - 7.10.2010, 16:41 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Здесь я малость перестарался. Мы ведь луч пускаем, нужно его с одной стороны ограничивать.... причем, главно сразу правильно сделал, а потом подумал и переделал. Надо было больше думать. заменить на xp<=x тоже и для y "and yp<=greatest(0,y) and yp>=least(0,y)" заменить на "yp<=y" Это сообщение отредактировал(а) Zloxa - 8.10.2010, 09:19 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
Еще раз спасибо за советы.
Я ранее не работала с такими сложными запросами, поэтому долго разбиралась. Но пока у меня не получилось заставить его работать. При выполнении запроса выдает ошибку: "Ошибка синтаксиса в выражении запроса" Возможно, дело в этом: (из хелпов про SQL) В общем случае оператор SELECT с подзапросом имеет вид: SELECT ... FROM ... WHERE <сравниваемое значение> <оператор> (SELECT ... FROM ... WHERE ...) Подзапрос часто называют вложенной командой SELECT, подкомандой SELECT или внутренней командой SELECT. Обычно подзапрос выполняется первым, и его результат используется для определения выборки в главном или внешнем запросе. Подзапрос можно использовать в следующих предложениях SQL команд: • WHERE • HAVING Примечание: Такие сервера как Oracle, MS SQL, Interbase поддерживают использование подзапросов еще и в предложении FROM. Это сообщение отредактировал(а) KateL - 8.10.2010, 18:10 |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
читайте документацию по тому продукту, с которым работатете, а не по какието невнятные хелпы по SQL. Акцесс поддерживает подзапросы в from.
Сейчас скорее по пальцам нужно перечислять движки, которые их не поддреживают нежели те, кто его поддерживает. Это сообщение отредактировал(а) Zloxa - 8.10.2010, 19:41 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
KateL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 9.8.2007 Где: Новосибирск Репутация: нет Всего: нет |
Большое спасибо за помощь!
Все заработало! (Моя ошибка была в том, что я немного переписала условие, и в качестве оператора "не равно" использовала != вместо <>) |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |