Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти точку с заданными координатами
 
 автор: Eugene77   (29.03.2012 в 06:49)   письмо автору
 
 

Таблица содержит координаты точек в многомерном пространстве.
Примерно вот так выглядит (с сокращениями)
CREATE TABLE
INT num PRIMARY_KEY,
INT pointNum,
INT axeNum,
double coordinateValue


У меня есть значение для всех координат некой точки.
Я хочу узнать, есть эта точка в таблице или нет?

Вроде бы должно быть просто, но я не могу придумать запроса.

  Ответить  
 
 автор: cheops   (29.03.2012 в 14:24)   письмо автору
 
   для: Eugene77   (29.03.2012 в 06:49)
 

А как координаты задаются в старшем и младшем разряде coordinateValue? Или как-то по другому?

  Ответить  
 
 автор: Eugene77   (30.03.2012 в 10:16)   письмо автору
 
   для: cheops   (29.03.2012 в 14:24)
 

>А как координаты задаются в старшем и младшем разряде coordinateValue? Или как-то по другому?
Не,
Координата - это всё число.
Оно относится к тому номеру оси axeNum с которым стоит в одной строке.

Такой формат хранения координат выбран потому что таблица должна хранить данные для пространств с разной размерностью

  Ответить  
 
 автор: cheops   (30.03.2012 в 13:08)   письмо автору
 
   для: Eugene77   (30.03.2012 в 10:16)
 

А... пространство многомерное, но координаты прямоугольные декартовы? Размерность пространства заранее не известна?

  Ответить  
 
 автор: Eugene77   (31.03.2012 в 07:24)   письмо автору
 
   для: cheops   (30.03.2012 в 13:08)
 

>А... пространство многомерное, но координаты прямоугольные декартовы? Размерность пространства заранее не известна?
Насчёт декартовости координат, трудно сказать, да и не имеет это отношения к вопросу.
Но размерность, действительно, заранее неизвестна.
Известно только, что она находится в пределах от 100 до 1000.
Кроме того, в таблице должны храниться точки из пространств разной размерности.
Этих пространств много, десятки, на каждое новую таблицу не получится сделать.

  Ответить  
 
 автор: cheops   (31.03.2012 в 14:13)   письмо автору
 
   для: Eugene77   (31.03.2012 в 07:24)
 

А в какой форме у вас
>У меня есть значение для всех координат некой точки.
Это массив или что? pointNum - это уникальный номер точки или за это отвечает num?

  Ответить  
 
 автор: Eugene77   (31.03.2012 в 15:13)   письмо автору
 
   для: cheops   (31.03.2012 в 14:13)
 

CREATE TABLE
INT num PRIMARY_KEY, - первичный ключ - смысла не имеет
INT pointNum, - номер точки (уникальный номер в другой таблице, к которой данная таблица присоединяется через этот внешний ключ, а в упомянутой родительской таблице - это первичный ключ)
INT axeNum, - номер оси (координатной)
double coordinateValue - значение координаты для данной оси (axeNum) и данной точки (pointNum)

  Ответить  
 
 автор: cheops   (01.04.2012 в 13:19)   письмо автору
 
   для: Eugene77   (29.03.2012 в 06:49)
 

Не уверен, но можно начать с такого запроса
SELECT
  pointNum,
  COUNT(pointNum) AS total
FROM
  tbl
WHERE
  (axeNum = 1 AND
  coordinateValue >= 0.3234 - 0.0001 AND 
  coordinateValue <= 0.3234 + 0.0001) OR
  ...
  (axeNum = 256 AND
  coordinateValue >= 0.5435 - 0.0001 AND 
  coordinateValue <= 0.5435 + 0.0001)
GROUP BY
  pointNum
HAVING
  total = 256
Т.е. смысл в том, чтобы найти такую точку (здесь в 256-мерном пространстве), для которой будет найдено все 256 соответствий.

  Ответить  
 
 автор: Eugene77   (03.04.2012 в 07:04)   письмо автору
 
   для: cheops   (01.04.2012 в 13:19)
 

>Не уверен, но можно начать с такого запроса
Спасибо!
Видимо, ничего лучше не придумать.

Вот этой части я пытался избежать, нормализуя числа паред записью в таблицу:
>
axeNum = 1 AND
>  coordinateValue >= 0.3234 - 0.0001 AND 
>  coordinateValue <= 0.3234 + 0.0001) OR


Как вы думаете, если перед записью числа нормализованы
При помощи округления и отбрасывания лишних нулей,
в запросе тоже нормализованы,
можно оставить только равенства?
>
axeNum = 1 AND
>  coordinateValue  =  0.3234  OR


Или MySQL, делая свои преобразования нарушит нормализацию?

  Ответить  
 
 автор: cheops   (03.04.2012 в 12:32)   письмо автору
 
   для: Eugene77   (03.04.2012 в 07:04)
 

Можно, но лучше, если бы у вас вместо double был DECIMAL.

  Ответить  
 
 автор: Eugene77   (03.04.2012 в 15:53)   письмо автору
 
   для: cheops   (03.04.2012 в 12:32)
 

>Можно, но лучше, если бы у вас вместо double был DECIMAL.
Спасибо!
Так и сделаю

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования