Воскресенье, 24 Ноября 2024, 10:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Реализация... электропроводки что-ли...
TAPAKAHДата: Воскресенье, 17 Января 2010, 22:55 | Сообщение # 1
почетный гость
Сейчас нет на сайте
В мозгу случился небольшой затык не могу придумать решение.
Ситуация следующая:
Имеется Батарейка/генератор. Есть несколько столбов соединенных последовательно и параллельно друг с другом и 1-2 столба подключены к батарее. Столбы стоят друг от друга на расстоянии 10 метров (предельное расстояние передачи энергии.)
Необходимо реализовать функцию(?) которая при разрушении одного из столбов отключала все последующие столбы в цепочке которые не подключены параллельными линиями к генератору.


Все имеет свое имя и название.
Осмысливая смысл смысла, в смысле смысла смысла смысла, не смысл ли помыслить о немыслимом?
P:OG
Лишь идеи рождают шедевры.
KallioДата: Воскресенье, 17 Января 2010, 23:22 | Сообщение # 2
частый гость
Сейчас нет на сайте
Если каждый столб представляет из себя объект, то для него должен существовать метод, который проверяет - питается ли до сих пор столб (есть ли функционирующие соседи, подключен ли к генератору). Для всех столбов вызывается сей метод, скажем 50 раз в секунду. в случае разрушения одного из столбов - это повлечет за собой вырубание цепи столбов в течении секунды максимум для цепи из 50 столбов. Мона оптимизировать процесс порядка обхода, так что цепочки будут вырубаться за один-два прохода.

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


Experiencia est optima magistra.

Сообщение отредактировал Kallio - Воскресенье, 17 Января 2010, 23:26
TAPAKAHДата: Понедельник, 18 Января 2010, 09:44 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Quote (Kallio)
Если каждый столб представляет из себя объект, то для него должен существовать метод, который проверяет - питается ли до сих пор столб (есть ли функционирующие соседи, подключен ли к генератору)

Вот в этом у меня и проблема. Стоят 3 столба в чистом поле и 1 батарейка, отрубил батарейку, свежеотрубленый столб смотри по сторонам и видит 2-х работающих братьев, и чтобы не палится в своей индивидуальности продолжает работать. Остальные 2-а столба даже не подозревают о каких либо изменениях.


Все имеет свое имя и название.
Осмысливая смысл смысла, в смысле смысла смысла смысла, не смысл ли помыслить о немыслимом?
P:OG
Лишь идеи рождают шедевры.
WXZRWДата: Понедельник, 18 Января 2010, 13:38 | Сообщение # 4
Thousand faces conspiration
Сейчас нет на сайте
TAPAKAH,

Задача ужасно простая, вот написал псевдо код, для копи паста не подойдет, но я бы делал примерно так :

ПС. В коде возможны опечатки - претензии по этому поводу также не принимаются. Сделано на скорую руки (5 минут).

Code
#include <vector>

using namespace std;

// describe how the pole may be ever connected
enum connection_type
{
connection_straight,
connection_parallel,
connection_mixed,
connection_short_curcuit,
connection_nothing
};

// pole information
typedef struct
{
int connection_method;
vector<int> neighbours;
bool connected_to_battery;
} electric_pole;

vector<electric_pole> network;

// Init default network
void init_pole_network()
{
electric_pole p,p1,p2;

// pole 1 connected to battery and to pole 2
p.connection_method = connection_straight;
p.neighbours.push_back(1);
p.connected_to_battery = true;

network.push_back(p);

// pole 2 connected to pole 1 and pole 3
p1.conenction_method = connection_straight;
p1.neighbours.push_back(0);
p1.neighbours.push_back(2);
p1.connected_to_battery = false;

network.push_back(p1);

// pole 3 connected to pole 2 and to battery
p2.conenction_method = connection_straight;
p2.neighbours.push_back(1);
p2.connected_to_battery = true;

network.push_back(p2);
}

// Shut down a pole required
void destroy_pole(int id)
{
network[id].connection_method = connection_nothing;
}

// Check is network OK or ain't
bool update_network()
{
bool result = true;

for(int i=0;i<network.size();i++)
{
if(network[i].connection_method == connection_nothing)
{
result = false;
break;
}
}

return result;
}
stanislavДата: Понедельник, 18 Января 2010, 14:52 | Сообщение # 5
Кролик Тёрнер
Сейчас нет на сайте
Необходима сама функция,или нужно сделать симуляцию?
TAPAKAHДата: Вторник, 19 Января 2010, 09:55 | Сообщение # 6
почетный гость
Сейчас нет на сайте
не стока функция сколько логика, мне просто в голову не особо приходит как реализовывать.

Все имеет свое имя и название.
Осмысливая смысл смысла, в смысле смысла смысла смысла, не смысл ли помыслить о немыслимом?
P:OG
Лишь идеи рождают шедевры.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг