Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Транспортная задача (графы) (https://javascript.ru/forum/dom-window/7523-transportnaya-zadacha-grafy.html)

FladeX 06.02.2010 16:19

Транспортная задача (графы)
 
Нужно реализовать следующий функционал:
1. Графический редактор, позволяющий создавать план дома / коттеджа.
2. Решение для созданного плана транспортной задачи - то есть нахождение оптимальной траектории (самой короткой, но при этом удовлетворяющей некоторым условиям).

Сейчас вопрос насчет первой части - как это реализовывать?

Самая первая идея - сделать таблицу в html, в которой каждая ячейка - это квадратный метр дома, а рамки ячейки - стены. Соответственно по кликам на рамки нужно менять их статус, но вроде такое не реализуется в javascript.
Тогда вторая идея - каждый элемент плана представлять в виде ячейки таблицы. Итого получается несколько возможных представлений - точка, вертикальная линия, горизонтальная линия и пустая ячейка. Но при этом html код разростается до ужасных размеров. Для примера я сделал план размером 2*2 - http://forumcatalog.ru/d/ - наведите мышкой на "стены", они изменят цвет (это только для наглядности).

Так как же мне быть? Каким способом реализовать? Или лучше вообще использовать другой язык программирования?

PepeL 06.02.2010 16:43

Вообще для рисования предусмотрены такие вещи как canvas, vml, svg.

FladeX 06.02.2010 16:53

С canvas я уже работал в принципе, но это не то. Нужно максимально упростить задачу составления плана, то есть в идеале чтобы был кликовый интерфейс - кликнул на рамку, она обозначилась как стена ну и т.д.

Но на всякий случай сейчас почитаю документацию, спасибо за ответ.

FladeX 06.02.2010 17:59

Поясню: мне не только нарисовать надо, мне надо передать полученные данные в php-обработчик для дальнейшей работы с задачей. То бишь вариант "просто нарисовать" не подходит, тут вообще можно не рисовать, а просто кликая на переключатели переставить их в нужные состояния.

Насчёт vml - не подходит, ибо у меня линукс. Насчёт svg - не подходит, ибо это значительно усложнит задачу (придется работать с xml, который еще и построить надо с помощью графического редактора).

PepeL 07.02.2010 01:42

Если у вас будут только горизонтальные и вертикальные линии, то можно попробовать строить все блоками с абсолютным позиционированием. Но такие планы обычно для типовых квартир.
Вообще не очень понятна идея того что вы хотите сделать.

FladeX 07.02.2010 01:49

Нужно составить план коттеджа и отметить на нём две точки - точка, куда подводится кабель и точку, которую к нему надо подключить. Далее нужно найти оптимальную траекторию такого подключения, учитывая, что она должна быть минимально возможной длины и не может проходить сквозь некоторые конструкторские элементы (например, окна).

PepeL 07.02.2010 22:41

А на сам план то можно посмотреть ?

FladeX 07.02.2010 22:47

План - динамическая часть, ее нужно вводить в программу. То бишь нет какого-то определенного заданного плана - при каждом сеансе работы со скриптом пользователь составляет новый план, а затем расчет ведется уже с этим планом.

PepeL 07.02.2010 23:57

Мне кажется вам стоит как раз начать с того чтобы найти какой-нибудь план, какого-нибудь дома. То есть поставить себя на место того самого пользователя, а то так получается что вы пытаетесь сделать то что сами не очень понимаете. Я хочу сказать, что в плане могут быть не только вертикальные и горизонтальные линии, но и наклонные. Поэтому все таки прийдеться использовать canvas и vml ... либо же есть такая библиотека "рафаель" вроде ... она как раз обьединяет в себе и то и другое. Может так же стоит посмотреть в сторону flash.
Хотел поинтересоваться почему вы хотите производить расчеты на стороне сервера?

Tim 08.02.2010 01:39

Цитата:

Мне кажется вам стоит как раз начать с того чтобы найти какой-нибудь план, какого-нибудь дома.
А мне кажется что существуют определённые задачи, которые лучше не пытаться решать определёнными методами. Иногда лучше где нибуть отверстие сделать чем по стенам под плинтус ховать.


Часовой пояс GMT +3, время: 02:21.