|
|
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
Задача : БД поверхностей (плоских), каждая из которых определяется списком вершин (их может быть от, очевидно, 3 до ...) Попытка решения : сделать таблицу с вершинами и поверхностями примерно так: Код: plaintext 1. 2. 3. 4. 5. К тому же, если из поверхностей в последствие собирать некоторые объемные тела, то вопрос там будет ставиться аналогично, и если здесь я могу относительно безболезненно жестко ограничить число вершин (скажем, 6-8-10...), то там уж точно не предугадать. Попытка решения альтернативная : сделать таблицу с вершинами и поверхностями по-другому: Код: plaintext 1. 2. 3. 4. Вопрос : как лучше поступить в такой ситуации? Наверняка задача достаточно тривиальная, чтобы иметь некоторое стандартное решение, которое, в силу моей неопытности, не приходит в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 13:28 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete, У тебя плоские фигуры => каждая точка имеет 2 координаты (x,y). Откуда ты еще z взял неясно. Отсюда вывод: 1 таблица FIGURES id - Name - наименование фигуры 2 таблица POINTS id figure_id - ссылка на фигуру x y Извлекать точки можно по id фигуры. Все равно в какой последовательности. Связь 1 ко многим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 13:45 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete, Надеюсь, ты догадался, что точки - это координаты вершин фигуры. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 13:47 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
DarkMaster, т.е. ты предлагаешь наоборот сделать: не в FIGURES ссылаться на POINTS, а в POINTS делать ссылку на FIGURES? типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. ну чтобы там данные не повторялись и т.д... ЗЫ координата z не принципиальна для схемы БД, но необходима, ибо поверхности в 3 измерениях находятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:11 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
сделате связующую таблицу между points и firures, через нее привязывайте к фигуре столько точек, сколько нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:19 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
господин Матроскин, поясните как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:21 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
ТС, вы путаете ссылки в обычных структурах данных процедурных языков и связи реляционных таблиц. В БД детальная таблица Тоски в каждой строке содержит айди мастер-таблицы Фигуры (владелицы деталей). В обычном языке делается класс Фигура, который содержит массив экземпляров класса Точки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:25 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
leteteпоясните как?Не менее стандарный кейс в БД - связь М:М делается через промежуточную таблицу, хранящую айди двух объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:26 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
я правильно понимаю, что должно получиться что-то вроде такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:29 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
П-Лleteteпоясните как?Не менее стандарный кейс в БД - связь М:М делается через промежуточную таблицу, хранящую айди двух объектов. В случае ТС это не нужно - зачем плодить лишние сущности? У него есть фигура, которая описывается набором вершин (точек). Даем каждой точке принадлежность фигуре (figure_id) и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:30 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete, Ты же уже написал правильную структуру несколькими постами выше. Задай себе вопрос, что будет делать пользователь (с какими объектами ему нужно манипулировать)? Он будет выбирать фигуру и смотреть/изменять/рисовать ее по координатам вершин или будет вводить координаты точки и смотреть, какая фигура имеет вершину с такими координатами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:33 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
leteteя правильно понимаю, что должно получиться что-то вроде такого: Это нужно только если вам заведомо надо хранить "твердый факт" принадлежности точки к несколькм фигурам одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:37 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
DarkMaster, пользователь (программа) будет из точки с некоторыми координатами смотреть на эти поверхности (аналогичным образом объединенные в пространственное тело), что вокруг него и высчитывать до какой короче перпендикуляр (условно). По сути, его интересуют плоскости. (Конечно, можно было бы задавать ее тогда треугольником! Но это приведет с сложному вычислению границ - линий пересечения плоскостей, что утяжелит программу и существенно замедлит ее работу.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:42 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
П-ЛЭто нужно только если вам заведомо надо хранить "твердый факт" принадлежности точки к несколькм фигурам одновременно. а если не нужно? Вообще говоря, исходя из того, что я написал чуть выше, думаю, да. Этот самый "твердый факт" будет не лишним, ибо в конечном счете пространственное тело не должно иметь разрывов... но на эту тему надо подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:45 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
leteteDarkMaster, т.е. ты предлагаешь наоборот сделать: не в FIGURES ссылаться на POINTS, а в POINTS делать ссылку на FIGURES? типа так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. если вы кодите именно фигуры (порядок обхода важен, заведомая выпуклость не гарантирована) -- т.е. "квадрат" <> "конверт" (два тр-ка по диагоналям и концам |X|), то храните еше и номер вершины (не обязательно сплошной нумератор, но порядок) на обходе. (хотя можете считать что обход задаётся uid-ом poitns-ов.) да, в некоторых БД можно хранить points как array . (можно и самому реализовать текстовый скажем контейнер) -- что удобно тогда, когда по точке вы почти никогда не будете искать фигуру. (в тех жэ "некоторых субд" есть спец индексы для array-ев, с помощью которых можно решать и эту задачу, и даже эффективно. но что делать в случае, когда вы соорудите самопальный контенер. ) если точки у вас зачем-то самостийные сущности (не могут быть 2-х одинаковых, а одинаковая точка 2-х поверхностей - одна сущность "точка g") то именно тогда вам в тему предложение матроскина. если вас интересуют только координаты - это лишнее усложнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:47 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
leteteя правильно понимаю, что должно получиться что-то вроде такого: Да, примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:50 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
qwwq, да, по точке фигуру я не буду искать никогда, однако для обеспечения неразрывности конечного тела, по-видимому, буду проверять пару соседних поверхностей (фигур) на предмет одинаковости двух точек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 14:54 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete, Если я правильно понимаю то: - вытаскиваем все фигуры с их координатами (зачем тут именно фигуры - непонятно, тут проще строить именно плоскости, иначе твои "перпендикуляры из точки" (упрощенно) в большинстве случаев промахнутся мимо фигуры на плоскости, а вот на саму плоскость вполне себе попадут - строим модель их фигур/плоскостей (для наглядности?) - выставляем произвольную точку - пытаемся определить, какая плоскость/фигура ближе В этом случае (ты будешь смеятся), даже понятие фигуры можно выбросить и заменить ее понятием плоскости, т.к. для построения плоскости нам достаточно 3 точек. А формула определения расстояния от точки до плоскости общеизвестна из курса прикладной геометрии. Отсюда имеем следующее: Таблица № раз (пусть будет FIGURES, чтобы не переделывать) CREATE TABLE FIGURES(ID PRIMARY KEY, NAME VARCHAR(100)); Таблца № два (POINTS) CREATE TABLE POINTS (ID PRIMARY KEY, FIGURE_ID INTEGER, X INTEGER, Y INTEGER, Z INTEGER); Заводим 2 плоскости: ID NAME 1 плоскость 1 2 плоскость 2 Заводим координаты для точек плоскости: ID FIGURE_ID X Y Z 1 1 1 1 1 - 2 1 2 2 2 координаты для "плоскости 1" 3 1 3 3 3 - 4 2 4 4 4 - 5 2 5 5 5 координаты для "плоскости 2" 6 2 6 6 6 - Затем: - выбираем все плоскости select id from figures - вібираем все точки для плоскостей select x,y,z from points where figure_id=:id (id мы получаем на предыдущем шаге). Примерно так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 15:01 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
leteteqwwq, да, по точке фигуру я не буду искать никогда, однако для обеспечения неразрывности конечного тела, по-видимому, буду проверять пару соседних поверхностей (фигур) на предмет одинаковости двух точек. для геометрий в оракел есть ... (запамятовал), что-то, как гугль подсказывает, именуемое "Oracle Spatial", а там -- пакет SDO_GEOM . в Postgresql есть postgis , а в нём тип geometry (это всё -- и точки, и линии и полилинии и многогранники и мультипойнты -- очень похоже на объекты SDO_GEOM. ф-ии тоже имеют пересечения--аналоги с оракловыми, но аналогия ессно не полная, а логическая). но если хочется субд-независимости - то наверное мастер(фигура)-слейв(точки) -- оптимальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 16:25 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete, Может, я не правильно понял с чем вы мучаетесь, но думаю, вам пригодится: Представление поверхности полигональной сеткой . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2014, 17:45 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letete Задача : БД поверхностей (плоских), каждая из которых определяется списком вершин (их может быть от, очевидно, 3 до ...) Берем PostgreSQL и видим, что там уже есть все необходимые типы :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 09:25 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, я postgresql и буду пользоваться! а что там с типами у нас? есть что почитать может? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 12:04 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
mad_nazgulБерем PostgreSQL и видим, что там уже есть все необходимые типы :-) к сожалению, эти типы предполагают лишь две координаты: аппликата отсутствует :-( это большая печалька... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 12:16 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
baracsпригодится: Представление поверхности полигональной сеткой . Отличная тема! Спасибо! Читаю взахлеб) но в моей задаче объекты будут простыми: куб, параллелепипед, куб со срезанным углом/ребром, пятиугольная призма, и т.п. - подход на основе полигональной сетки прекрасен, но эту задачу будет усложнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 12:30 |
|
||
|
БД с заранее не известным числом полей
|
|||
|---|---|---|---|
|
#18+
letetemad_nazgulБерем PostgreSQL и видим, что там уже есть все необходимые типы :-) к сожалению, эти типы предполагают лишь две координаты: аппликата отсутствует :-( это большая печалька... чо, в натуре ? я правда лично пока пользовался только геометрией на геоиде. т.е. двумерной, но вот выдержка http://gis-lab.info/docs/postgis/manual/ch06.html ST_X(geometry) Возвращает координату X точки. Геометрия должна быть точкой. ST_Y(geometry) Возвращает координату Y точки. Геометрия должна быть точкой. ST_Z(geometry) Возвращает координату Z точки, или NULL, если этой координаты нет. Геометрия должна быть точкой. 2 координаты наверное у стандартного постгрессовского point . он в постгисе не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 12:52 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1541003]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 162ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...