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

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

27.03.2014, 19:24. Показов 6497. Ответов 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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.03.2014, 20:49
Так вы шлите этих дядей на ... обратно в столицу и пребывайте себе дальше в счастливом неведении по поводу всех и всяческих автоматов.

А если серьезно - то с какого перепугу частице блуждать по поверхности фуллерена? Как минимум вам должны дать правила перехода состояний ячеек автомата.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
30.03.2014, 19:11  [ТС]
это вся инфа, что дали!
Вложения
Тип файла: pdf fulleren_obzor.pdf (579.3 Кб, 14 просмотров)
Тип файла: doc kletochny_avtomat_fulleren.doc (12.0 Кб, 13 просмотров)
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
30.03.2014, 19:12  [ТС]
вот развертка
Миниатюры
Клеточный автомат блуждания частицы по поверхности фуллерена C60  
0
30.03.2014, 20:02

Не по теме:

Цитата Сообщение от BRcr Посмотреть сообщение
пребывайте себе дальше в счастливом неведении по поводу всех и всяческих автоматов
Это до первой сессии. А потом один автомат изучить придется :)

0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
30.03.2014, 20:41
OK. Начни с двух вещей:
- выясни у дядек закономерность изменения приоритетов перехода для ячеек;
- пронумеруй ячейки и установи, с какими другими ячейками связана каждая из них(окрестность).
Дальше будем думать за код.

И давай уже посерьезней вникай, это ведь нужно не кому-то из форумчан, это нужно тебе.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
01.04.2014, 18:33  [ТС]
это случайно не 5 пункт в документе Word, что я приложил..? Там описываются правила переходов..

Добавлено через 23 минуты
Если я правильно тебя понял на счет окрестности, то т.к. рассматриваемая окрестность - Неймана, то получается у 12 пятиугольников по 5 соседей, у 20 шестиугольников - по 6.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.04.2014, 21:39
Допустим. А все, что ты написал, то и допустим.

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

Пусть ты знаешь, что "у 12 пятиугольников по 5 соседей, у 20 шестиугольников - по 6". Как тебе это поможет определить конкретных соседей каждой из ячеек? Трехмерную сферообразную матрицу строить будешь, да?

Соображай уже шустрее, здесь репетиторов особо нету...
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
18.04.2014, 19:28  [ТС]
Добрый человек! Наверное ты уже не ждешь, что я отвечу.. Написал дядькам - уже 2 неделю нет ответа!!!А так - пронумеровал ячейки, как ты и советовал! Трехмерную сферообразную матрицу не надо строить, а развертку! Насколько я понял, хоть и развертка, но подразумевается сфера, в плане соседства ячеек, т.е. либо 5, либо 6 соседей у каждой ячейки! Надо бы уточнить - но никак не ответят дядьки...
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.04.2014, 21:31
Про трехмерное сферообразное - это был фиг ее построишь...

Пронумеровал - хорошо. Теперь можешь построить ассоциативную таблицу, где для каждой ячейки будет хранится список ее связей с соседями. Это будет основная карта окрестностей.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
22.04.2014, 19:46  [ТС]
Доброго времени суток))) поговорил с дядькой - сказал что начальные приоритеты ячеек зависят от начального расположения зарядов(от 2 до 20) уже во время работы программы, т.е. случайным образом расставляешь ячейки, а потом смотришь какой приоритет у каждой и дальше по правилам (пункт 5 в документе Word)! Были некоторые проблемы с вопросом соседства ячеек - сказал что вышлет ближе к 9-10 мая!!!

Добавлено через 1 минуту
готовую таблицу соседства для фуллерена С60

Добавлено через 3 минуты
Доброго времени суток))) поговорил с дядькой - сказал что начальные приоритеты ячеек зависят от начального расположения зарядов(от 2 до 20) уже во время работы программы, т.е. случайным образом расставляешь ячейки, а потом смотришь какой приоритет у каждой и дальше по правилам (пункт 5 в документе Word)! Были некоторые проблемы с вопросом соседства ячеек - сказал что вышлет ближе к 9-10 мая готовую "таблицу соседства"!
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.04.2014, 21:06
Цитата Сообщение от Дикинов Мурат Посмотреть сообщение
а потом смотришь какой приоритет у каждой и дальше по правилам (пункт 5 в документе Word)!
Пункт 5:
5. Правила послойного перехода. Ячейка может либо сохранится в заряженном состоянии, либо заряд может перейти в любую ячейку из окрестности. Для каждой заряженной ячейки определяется приоритет перехода заряда: 3- переход обязателен, 4 — переход не обязателен. Для каждой свободной ячейки из окрестности Неймана определяется приоритет перехода в данную ячейку: 5 — переход желателен, 6 — переход не желателен. Если в окрестности рассматриваемой заряженной ячейки есть свободные ячейки с приоритетом 5, то заряд перемещается в любую из них случайным образом. Если у рассматриваемой ячейки есть соседи только с приоритетом 6, а переход не обязателен (приоритет перехода 4), то заряд остается на месте. Если переход обязателен (приоритет перехода 3), то переход слуяайным образом осуществляется в любую ячейку.
И этот пресловутый пункт не дает ответа на вопрос - "как решить, является ли на следующем шаге переход заряда обязательным или нет для каждой из заряженных ячеек?" Вопрос остается открытым.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
23.04.2014, 18:38  [ТС]
если 2 заряженные ячейки граничат друг с другом - тогда они должны оттолкнуться обязательно, если есть конечно куда оттолкнуться (свободная ячейка рядом)))) Это то..???
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.04.2014, 18:50
Не то. Не полностью то.
Смоделируй в уме множество из нескольких клеток на пару шагов и попробуй применить уже имеющиеся правила. Ты все поймешь.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
23.04.2014, 19:12  [ТС]
по начальному расположению зарядов приоритеты всех ячеек определить не получается, насколько я понимаю!!!
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
23.04.2014, 19:25
Задать изначальные приоритеты можно и случайно. Но вот по какой закономерности они будут изменяться с течением времени - вот вопрос.
1
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
23.04.2014, 19:42  [ТС]
я так и спросил у них - четкого ответа не было! и еще - в 5 пункте не оговаривается же в каких случаях переход желателен (приоритет 5) и в каких не желателен (приоритет 6) или я не вижу!!!
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.04.2014, 18:28
Накидал простенький автомат:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
    TPanel * shapes_pnl;
    TButton * btn_step;
 
    void __fastcall btn_stepClick( TObject * Sender );
 
private: // User declarations
 
        public : // User declarations
 
    void __fastcall cell_mouse_down( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y );
    __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
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <vcl.h>
#pragma hdrstop
 
#include <list>
#include <vector>
#include <map>
#include <math.h>
#include <algorithm>
#include <StrUtils.hpp>
#include <Windows.h>
#include <Math.hpp>
 
#include <ShellAnimations.hpp>
 
#include "Unit1.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 * Form1;
 
class t_cell_shape : public TShape
{
    void __fastcall Paint( )
    {
        Brush->Color = charged ? ( gp == 3 ? clAqua : clSkyBlue ) : ( rp == 5 ? clGreen : clRed );
        TShape::Paint( );
        Canvas->TextOut( Width / 2 - 15, 5, Name );
        Canvas->TextOut( Width / 2 - 30, 20, "rp: " + IntToStr( rp ) + "; gp: " + IntToStr( gp ) );
 
        String _neibs;
        for ( t_neibs::iterator it( neibs.begin( ) ), end( neibs.end( ) ); it != end; ++it )
        {
            _neibs += IntToStr( it->first ) + " ";
        }
        Canvas->TextOut( 5, 35, "neibs: " + _neibs );
        Canvas->TextOut( 10, 50, "charge_id: " + IntToStr( charge_id ) );
    }
 
public:
    bool charged, just_received;
    int rp, gp; // receive_priority, give_priority
    int charge_id;
 
    typedef std::map < int, t_cell_shape * > t_neibs;
 
    t_neibs neibs;
 
    void __fastcall move_charge( t_cell_shape * sh )
    {
        sh->charged = true;
        sh->charge_id = charge_id;
        sh->just_received = true;
        charged = false;
        charge_id = 0;
    }
 
    __fastcall t_cell_shape( TComponent * Owner ) :
        TShape( Owner ),
        charge_id( 0 ),
        just_received( false )
    {
    }
} ;
 
t_cell_shape * shapes[ 12 ];
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner ) :
    TForm( Owner )
{
    t_cell_shape * sh;
    int w( shapes_pnl->Width / 4 - 30 );
 
    std::srand( std::time( 0 ) );
 
    for ( int i( 0 ), i_limit( 12 ); i < i_limit; ++i )
    {
        sh = shapes[ i ] = new t_cell_shape( this );
 
        sh->Parent = shapes_pnl;
        sh->Name = "cell_" + IntToStr( i );
        sh->Shape = stCircle;
        sh->Width = w;
        sh->Height = w;
        sh->Pen->Style = psClear;
        sh->OnMouseDown = &cell_mouse_down;
    }
    for ( size_t i( 0 ), i_limit( 3 ); i < i_limit; ++i )
    {
        for ( size_t k( 0 ), k_limit( 4 ); k < k_limit; ++k )
        {
            sh = ( *( shapes + i * 4 + k ) );
            sh->Left = 10 + ( ( i + 1 ) % 2 ? w / 2 : 0 ) + k * w + k * 10;
            sh->Top = 10 + i * w;
 
            sh->rp = rand( ) % 100 > 50 ? 5 : 6;
            sh->gp = rand( ) % 100 > 50 ? 3 : 4;
        }
    }
    for ( int i( 0 ), i_limit( 12 ); i < i_limit; ++i )
    {
        for ( int k( 0 ), k_limit( 12 ); k < k_limit; ++k )
        {
            if ( ( k != i ) &&
                InRange( shapes[ k ]->Left, shapes[ i ]->Left - w - 20, shapes[ i ]->Left + w + 20 ) &&
                InRange( shapes[ k ]->Top, shapes[ i ]->Top - w - 20, shapes[ i ]->Top + w + 20 ) )
            {
                shapes[ i ]->neibs[ k ] = shapes[ k ];
            }
        }
    }
}
 
// ---------------------------------------------------------------------------
__fastcall TForm1::~TForm1( )
{
 
}
 
// ---------------------------------------------------------------------------
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::cell_mouse_down( TObject * Sender, TMouseButton Button, TShiftState Shift, int X, int Y )
{
    static int charge_id( 1 );
    t_cell_shape * sh( static_cast < t_cell_shape * > ( Sender ) );
    sh->charged = !sh->charged;
    sh->charge_id = charge_id++ ;
    sh->Repaint( );
}
 
// ---------------------------------------------------------------------------
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_shape::t_neibs::iterator last_uncharged;
 
    for ( int i( 0 ), i_limit( 12 ); i < i_limit; ++i, passed = false, uncharged_exists = false )
    {
        for ( t_cell_shape::t_neibs::iterator it( shapes[ i ]->neibs.begin( ) ), end( shapes[ i ]->neibs.end( ) );
            shapes[ i ]->charged && !shapes[ i ]->just_received && ( it != end ); ++it )
        {
            if ( !it->second->charged )
            {
                uncharged_exists = true;
                last_uncharged = it;
                if ( it->second->rp == 5 )
                {
                    shapes[ i ]->move_charge( it->second );
                    passed = true;
                }
            }
        }
        if ( ( shapes[ i ]->gp == 3 ) && uncharged_exists && !passed )
        {
            shapes[ i ]->move_charge( last_uncharged->second );
        }
    }
    for ( int i( 0 ), i_limit( 12 ); i < i_limit; ++i )
    {
        shapes[ i ]->rp = rand( ) % 100 > 50 ? 5 : 6;
        shapes[ i ]->gp = rand( ) % 100 > 50 ? 3 : 4;
        shapes[ i ]->just_received = false;
        shapes[ i ]->Repaint( );
    }
}
Чтобы поставить заряд на ячейку или убрать его, надо ячейку мышкой ткнуть...
Все изменения приоритетов рандомные.
Поверхность не замкнутая - то бишь окрестность составляют лишь ближайшие клетки. Вычисляются они тупым перебором. В случае с разверткой фуллерена, чувствую, придется тебе соседей забивать вручную...
Цветовая индикация приоритетов вроде очевидна: 3 - голубой, 4 - бледно-голубой, 5 - зеленый, 6 - красный.

Экзешник - Project1.rar
Миниатюры
Клеточный автомат блуждания частицы по поверхности фуллерена C60   Клеточный автомат блуждания частицы по поверхности фуллерена C60  
4
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
25.04.2014, 18:49  [ТС]
здравствуй BRcr, сегодня лично беседовал с одним из дядек)) Спросил про изменения приоритетов во время выполнения! немного подробнее рассказал про пресловутый 5 пункт, и все же - все приоритеты ставятся в зависимости от расположения ячеек:
1) приоритет 3(переход обязателен) - если граничат 2 заряженные ячейки. если есть свободная ячейка с заряженным соседом, то переход в эту ячейку не желателен(приоритет 6), если нет заряженного соседа - то желателен( приоритет 5). Если сосед с приоритетом 5, то переходим туда, если их несколько с приоритетом 5 - случайно в любую их них! если сосед с приоритетом 6 (не желателен переход) - то переходим, т.к. переход обязательный, если их несколько - также переходим случайным образом;
2) приоритет 4 ( переход возможен, но не обязателен)- если нет заряженных соседей!
Надо проверять, чтоб несколько ячеек не претендовали на одну ячейку за 1 такт! 1 такт - это переход всех ячеек, с приоритетом 3! завершив 1 такт - снова расставляем приоритеты и т.д.
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 41
21.05.2014, 18:44  [ТС]
привет всем)) получил список соседей, а также еще одно условие - надо использовать генератор случайных чисел с длиной последовательности 32000. дядя объяснил для чего : "У Вас на развертке 32 ячейки. Потенциально для каждой из них может оказаться необходимым на каждом шагу делать случайный выбор.
За 1000 шагов (если есть стационарное состояние) мы ожидаем возможность прихода в стационарное состояние. Итого оценка сверху для необходимой длины последовательности генератора случайных чисел - 32000". файл соседства приложил! Люди - что дальше делать посоветуете?
Вложения
Тип файла: doc Усеченный икосаэдр - соседство1.doc (87.5 Кб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2014, 18:44
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru