Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41

Клеточный автомат блуждания частицы по поверхности фуллерена C60

27.03.2014, 19:24. Показов 6786. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток))) приехали в провинцию умные дяди из Москвы и задали создать клеточный автомат блуждания частицы по поверхности фуллерена C60!!! Моделирование процессов не особо проходили, про клеточные автоматы первый раз услышал, с комп. графика - VBA немного "просмотрели", про фуллерен тем более никогда не слышал - "с места в карьер"!!! осваивать новые технологии времени нет, да и спросить тоже особо не у кого((( это про фуллерен http://ru.wikipedia.org/wiki/%... 0%B5%D0%BD, а это развертка [cut]
Так что, если кто-то может помочь сделать или просто сделать - напишите)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2014, 19:24
Ответы с готовыми решениями:

Клеточный автомат
Добрый день! Проблема: не знаю как сделать так, чтобы программа работала со StringGrig следующем образом. При нажатии кнопки...

Клеточный автомат
Никак не могу написать прогу. Если кто знает help me пожалуйста. А вот собственно и текст проги: Напишите прогу представляющую...

Клеточный автомат
Ребят снова я со своим лабвью. Задача отброзить клеточный автомат 2D диффузии. Кто подскажет формулу и в какой из циклов ее пихнуть? И еще...

74
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
08.06.2014, 15:03  [ТС]
Студворк — интернет-сервис помощи студентам
Access violation at address .... in module 'Project1.exe'. read of address 00000038 не ставится на другие шейпы(((

Добавлено через 5 минут
Access violation at address 004030F6 in module 'project1.exe'. read of address 00000038
не ставится на другие шейпы, кроме первого(((((
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 15:07
C++
1
2
3
4
5
6
7
8
9
10
    // блок заполнения окрестностей ячеек
    cells[ shp1 ] = new t_cell( this );
    cells[ shp1 ]->sh = shp1;
    cells[ shp1 ]->neibs << shp1a << shp1b << shp1c << shp1d << shp1e; // список соседей, оператор << перегружен в хедере
 
    // и тд в том же духе, для каждой ячейки :)
 
    // ...
 
    // конец блока заполнения окрестностей ячеек
Вот это я для кого писал?
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
08.06.2014, 15:22  [ТС]
))) блин, извини что по пустякам отвлекаю, не то скинул))) ошибся в заполнении соседей, вроде пашет) теперь думаю на таймер перебросить код с кнопки! а есть вариант сделать кнопку типа "Сбросить" все заряды до запуска перераспределения и количество шагов в конце вывести ???
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 15:46
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
есть вариант сделать кнопку типа "Сбросить" все заряды до запуска перераспределения
C++
1
2
3
4
5
6
7
8
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it )
    {
        it->second->charged = false;
        it->second->just_received = false;
        it->second->set_sh_params( );
    }
Количество шагов - это static int step( 0 );, его и выводи. Для таймера переделай переменную step, поместив ее в класс формы, тогда сможешь ее обнулять при перезапуске таймера.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
08.06.2014, 16:50  [ТС]
я правильно понял, прога сама начальные приоритеты ставит 5 и 6 - когда сделал кнопку очистить, то ячейки стали красного и зеленого цветов???

Добавлено через 11 минут
надо же ведь заряды поставить, затем приоритеты посчитать???
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 17:02
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
я правильно понял, прога сама начальные приоритеты ставит 5 и 6
Все верно, приоритеты задаются и меняются рандомно.
C++
1
2
3
4
5
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) ); it != end; ++it )
    {
        it->second->rp = rand( ) % 100 > 50 ? 5 : 6;
        it->second->gp = rand( ) % 100 > 50 ? 3 : 4;
    }
C++
1
2
3
4
5
6
7
8
9
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it )
    {
        it->second->rp = rand( ) % 100 > 50 ? 5 : 6;
        it->second->gp = rand( ) % 100 > 50 ? 3 : 4;
        it->second->set_sh_params( );
        it->second->just_received = false;
    }
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
надо же ведь заряды поставить, затем приоритеты посчитать???
А чего там считать? Да и по какой именно закономерности считать?
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
08.06.2014, 17:07  [ТС]
только по 5 пункту + вот это
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
1) приоритет 3(переход обязателен) - если граничат 2 заряженные ячейки. если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6), если нет заряженного соседа - то желателен( приоритет 5). Если сосед с приоритетом 5, то переходим туда, если их несколько с приоритетом 5 - случайно в любую их них! если сосед с приоритетом 6 (не желателен переход) - то переходим, т.к. переход обязательный, если их несколько - также переходим случайным образом;
2) приоритет 4 ( переход возможен, но не обязателен)- если нет заряженных соседей!
Надо проверять, чтоб несколько ячеек не претендовали на одну ячейку за 1 такт! 1 такт - это переход всех ячеек, с приоритетом 3! завершив 1 такт - снова расставляем приоритеты и т.д.
другого мне не обясняли(((
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 17:51
Тогда где-то так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
typedef std::vector < TShape * > t_neibs;
 
t_neibs & operator << ( t_neibs & v, TShape * s )
{
    v.push_back( s );
    return v;
}
 
// ---------------------------------------------------------------------------
class t_cell : public TComponent
{
 
public:
    bool charged, just_received;
    int rp, gp; // receive_priority, give_priority
    int charge_id;
    TShape * sh;
 
    t_neibs neibs;
 
    void __fastcall pass_charge_to( t_cell * receiver )
    {
        receiver->receive_charge( charge_id );
        charged = false;
        charge_id = 0;
        set_sh_params( );
    }
 
    void receive_charge( int _id )
    {
        charged = true;
        charge_id = _id;
        just_received = true;
        set_sh_params( );
    }
 
    void set_sh_params( )
    {
        sh->Brush->Color = charged ? ( gp == 3 ? clAqua : clSkyBlue ) : ( rp == 5 ? clGreen : clRed );
        sh->Repaint( );
    }
 
    void __fastcall toggle_charge( int _id )
    {
        if ( charged = !charged )
        {
            charge_id = _id;
        }
        else
        {
            charge_id = 0;
        }
        set_sh_params( );
    }
 
    __fastcall t_cell( TComponent * Owner ) :
        TComponent( Owner ),
        charge_id( 0 ),
        rp( 5 ),
        gp( 4 ),
        just_received( false )
    {
    }
} ;
 
// ---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TImage * img1;
    TShape * shp1;
    TShape * shp1a;
    TShape * shp1b;
    TShape * shp1c;
    TShape * shp1d;
    TShape * shp1e;
    TButton * btn_step;
 
    void __fastcall btn_stepClick( TObject * Sender );
    void __fastcall shp1MouseDown( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y );
 
public: // User declarations
 
        typedef std::map < TShape *, t_cell * > t_cells;
 
    t_cells cells;
 
    void recalc_priorities( void )
    {
        for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
            it != end;
            ++it )
        {
            t_cell * cell( it->second );
            cell->gp = 4;
            cell->rp = 5;
            for ( t_neibs::iterator neib( cell->neibs.begin( ) ), neib_end( cell->neibs.end( ) );
                neib != neib_end;
                ++neib )
            {
                t_cell * neib_cell( cells[ * neib ] );
                if ( cell->charged && neib_cell->charged )
                {
                    cell->gp = 3;
                }
                if ( !cell->charged && neib_cell->charged )
                {
                    cell->rp = 6;
                }
            }
            cell->set_sh_params( );
            cell->just_received = false;
        }
    }
 
    __fastcall TForm1( TComponent * Owner );
    // __fastcall ~TForm1( );
} ;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
__fastcall TForm1::TForm1( TComponent * Owner ) :
    TForm( Owner )
{
    // блок заполнения окрестностей ячеек
    cells[ shp1 ] = new t_cell( this );
    cells[ shp1 ]->sh = shp1;
    cells[ shp1 ]->neibs << shp1a << shp1b << shp1c << shp1d << shp1e; // список соседей, оператор << перегружен в хедере
 
    // и тд в том же духе, для каждой ячейки :)
 
    // ...
 
    // конец блока заполнения окрестностей ячеек
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::btn_stepClick( TObject * Sender )
{
    static int step( 0 );
    static_cast < TButton * > ( Sender )->Caption = "Шаг " + IntToStr( ++step );
    bool passed( false ), uncharged_exists( false );
    t_cell * last_uncharged;
 
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it, passed = false, uncharged_exists = false )
    {
        t_cell * cell( it->second );
        for ( t_neibs::iterator neib( cell->neibs.begin( ) ), neib_end( cell->neibs.end( ) );
            cells[ *neib ]->charged && !cells[ *neib ]->just_received && ( neib != neib_end );
            ++neib )
        {
            t_cell * neib_cell( cells[ * neib ] );
            if ( !neib_cell->charged )
            {
                uncharged_exists = true;
                last_uncharged = neib_cell;
                if ( neib_cell->rp == 5 )
                {
                    cell->pass_charge_to( neib_cell );
                    passed = true;
                }
            }
        }
        if ( !passed && uncharged_exists && ( cell->gp == 3 ) )
        {
            cell->pass_charge_to( last_uncharged );
        }
    }
    recalc_priorities( );
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::shp1MouseDown( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y )
{
    static int charge_id( 1 );
    cells[ static_cast < TShape * > ( Sender ) ]->toggle_charge( charge_id++ );
    recalc_priorities( );
}
И очистка:
C++
1
2
3
4
5
6
7
    for ( t_cells::iterator it( cells.begin( ) ), end( cells.end( ) );
        it != end;
        ++it )
    {
        it->second->charged = false;
    }
    recalc_priorities( );
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 00:12  [ТС]
на первый взгляд все четко с приоритетами - поставил заряд, соседние поменялись)) только вот движение пропало.. на месте стоят((
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 00:23
Что-то верится с трудом... я не трогал движок.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 00:30  [ТС]
движок это же вот эта часть в хэдере
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class t_cell : public TComponent
{
 
public:
    bool charged, just_received;
    int rp, gp; // receive_priority, give_priority
    int charge_id;
    TShape * sh;
 
    t_neibs neibs;
 
    void __fastcall pass_charge_to( t_cell * receiver )
    {
        receiver->receive_charge( charge_id );
        charged = false;
        charge_id = 0;
        set_sh_params( );
    }
 
    void receive_charge( int _id )
    {
        charged = true;
        charge_id = _id;
        just_received = true;
        set_sh_params( );
    }
 
    void set_sh_params( )
    {
        sh->Brush->Color = charged ? ( gp == 3 ? clAqua : clSkyBlue ) : ( rp == 5 ? clGreen : clRed );
        sh->Repaint( );
    }
 
    void __fastcall toggle_charge( int _id )
    {
        if ( charged = !charged )
        {
            charge_id = _id;
        }
        else
        {
            charge_id = 0;
        }
        set_sh_params( );
    }
 
    __fastcall t_cell( TComponent * Owner ) :
        TComponent( Owner ),
        charge_id( 0 ),
        rp( 5 ),
        gp( 4 ),
        just_received( false )
 
} ;
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 00:33
Отчасти. Основное - в методе btn_stepClick.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 01:37  [ТС]
а как задать условие такое - если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6) для ячейки с приоритетом 3?

Добавлено через 10 минут
кроме этого - а как сделать, чтоб прога останавливалась, если приоритет заряженных ячеек стал 4, а то они бесконечно движутся(цель ведь в этом - найти магическую конфигурацию и магическое число)...???
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 08:57
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6) для ячейки с приоритетом 3?
Согласно твоим правилам у свободной ячейки с заряженным соседом и так будет приоритет 6 для всех.

Добавлено через 18 минут
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
как сделать, чтоб прога останавливалась,
Скидывай проект, как он сейчас есть, посмотрим.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 11:21  [ТС]
имею ввиду, что если заряды должны оттолкнуться, а среди соседей одной или обоих ячеек есть сосед, у которого уже есть заряженный сосед (см. фото) - зеленые ячейки, с белым центром, которые находятся между заряженной ячейкой(синего цвета) и заряженной ячейкой, которая должна оттолкнуться от соседа(голубой цвет)
Миниатюры
Клеточный автомат блуждания частицы по поверхности фуллерена C60  
Вложения
Тип файла: rar VCL forms test app.rar (2.29 Мб, 5 просмотров)
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 11:22  [ТС]
должны быть красного цвета - в них переход не желателен
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 12:24
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
имею ввиду, что если заряды должны оттолкнуться, а среди соседей одной или обоих ячеек есть сосед, у которого уже есть заряженный сосед (см. фото) - зеленые ячейки, с белым центром, которые находятся между заряженной ячейкой(синего цвета) и заряженной ячейкой, которая должна оттолкнуться от соседа(голубой цвет)
хех )) вообще-то они и согласно уже существующим правилам зелеными быть не должны)) Гляну чуть попозже...
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 17:00  [ТС]
зеленый цвет - переход желателен(это еще со старой версии осталось),тогда почему не должны быть зелеными - окрестность ячейки с зарядом не обязательно должна быть красной(приоритет 6 - не желателен переход), окрестность может быть как зеленой, так и красной! это уже в зависимости от того, с кем граничат соседи заряженной ячейки.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 17:47
Ну, на картинке у тебя две ячейки, помеченные белым, каждая граничит ажно с двумя заряженными соседями - следовательно, они однозначно должны быть красными.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
10.06.2014, 09:59  [ТС]
вот и я о том же)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2014, 09:59

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

клеточный автомат жизни
Нужна ваша помощь. Необходимо заполнить матрицу 25 на 25 0 и 1. По краям матрицы 0. 0 - мертвая клетка 1 - живая клетка Если у...

Одномерный клеточный автомат
На рисунке показано несколько поколений одномерного клеточного автомата. У каждой клетки только два соседа — слева и справа, а поле...

Доработать клеточный автомат
Здравствуйте. Есть задание сделать клеточный автомат. Проект прикреплю. Как сделать так , чтобы по нажатию кнопки клетки закрашивались...

Клеточный автомат Винера-Розенблюта
Рябят, сто не так с кодом? Где ошибка? Пишет &quot; Встречено '.', а ожидалось ';'&quot; это в самом конце где END. Может еще что -то не так. Кто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru