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

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

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

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

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

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

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

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

74
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
08.06.2014, 15:03  [ТС] 41
Author24 — интернет-сервис помощи студентам
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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 15:07 42
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  [ТС] 43
))) блин, извини что по пустякам отвлекаю, не то скинул))) ошибся в заполнении соседей, вроде пашет) теперь думаю на таймер перебросить код с кнопки! а есть вариант сделать кнопку типа "Сбросить" все заряды до запуска перераспределения и количество шагов в конце вывести ???
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 15:46 44
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
есть вариант сделать кнопку типа "Сбросить" все заряды до запуска перераспределения
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  [ТС] 45
я правильно понял, прога сама начальные приоритеты ставит 5 и 6 - когда сделал кнопку очистить, то ячейки стали красного и зеленого цветов???

Добавлено через 11 минут
надо же ведь заряды поставить, затем приоритеты посчитать???
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 17:02 46
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
я правильно понял, прога сама начальные приоритеты ставит 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  [ТС] 47
только по 5 пункту + вот это
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
1) приоритет 3(переход обязателен) - если граничат 2 заряженные ячейки. если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6), если нет заряженного соседа - то желателен( приоритет 5). Если сосед с приоритетом 5, то переходим туда, если их несколько с приоритетом 5 - случайно в любую их них! если сосед с приоритетом 6 (не желателен переход) - то переходим, т.к. переход обязательный, если их несколько - также переходим случайным образом;
2) приоритет 4 ( переход возможен, но не обязателен)- если нет заряженных соседей!
Надо проверять, чтоб несколько ячеек не претендовали на одну ячейку за 1 такт! 1 такт - это переход всех ячеек, с приоритетом 3! завершив 1 такт - снова расставляем приоритеты и т.д.
другого мне не обясняли(((
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.06.2014, 17:51 48
Тогда где-то так...
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  [ТС] 49
на первый взгляд все четко с приоритетами - поставил заряд, соседние поменялись)) только вот движение пропало.. на месте стоят((
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 00:23 50
Что-то верится с трудом... я не трогал движок.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 00:30  [ТС] 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
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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 00:33 52
Отчасти. Основное - в методе btn_stepClick.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 01:37  [ТС] 53
а как задать условие такое - если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6) для ячейки с приоритетом 3?

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

Добавлено через 18 минут
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
как сделать, чтоб прога останавливалась,
Скидывай проект, как он сейчас есть, посмотрим.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 11:21  [ТС] 55
имею ввиду, что если заряды должны оттолкнуться, а среди соседей одной или обоих ячеек есть сосед, у которого уже есть заряженный сосед (см. фото) - зеленые ячейки, с белым центром, которые находятся между заряженной ячейкой(синего цвета) и заряженной ячейкой, которая должна оттолкнуться от соседа(голубой цвет)
Миниатюры
Клеточный автомат блуждания частицы по поверхности фуллерена C60  
Вложения
Тип файла: rar VCL forms test app.rar (2.29 Мб, 5 просмотров)
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 11:22  [ТС] 56
должны быть красного цвета - в них переход не желателен
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 12:24 57
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
имею ввиду, что если заряды должны оттолкнуться, а среди соседей одной или обоих ячеек есть сосед, у которого уже есть заряженный сосед (см. фото) - зеленые ячейки, с белым центром, которые находятся между заряженной ячейкой(синего цвета) и заряженной ячейкой, которая должна оттолкнуться от соседа(голубой цвет)
хех )) вообще-то они и согласно уже существующим правилам зелеными быть не должны)) Гляну чуть попозже...
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
09.06.2014, 17:00  [ТС] 58
зеленый цвет - переход желателен(это еще со старой версии осталось),тогда почему не должны быть зелеными - окрестность ячейки с зарядом не обязательно должна быть красной(приоритет 6 - не желателен переход), окрестность может быть как зеленой, так и красной! это уже в зависимости от того, с кем граничат соседи заряженной ячейки.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.06.2014, 17:47 59
Ну, на картинке у тебя две ячейки, помеченные белым, каждая граничит ажно с двумя заряженными соседями - следовательно, они однозначно должны быть красными.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
10.06.2014, 09:59  [ТС] 60
вот и я о том же)
0
10.06.2014, 09:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2014, 09:59
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru