Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10

FreeBasic круги на воде

09.05.2018, 22:54. Показов 1829. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень интересный код имитирующий распространение кругов на воде.
Описание алгоритма тут
Что меня удивило, обычно когда идет речь о построении окружности, то программист сразу думает о синусах и косинусах.
А тут вообще ни какой геометрии-тригонометрии. Просто массив, который изменяется по определённому закону.
Вообще всё это удивительная магия математики. Скорость распространения волн ни как не зависит от их кол-ва. Можно нащёлкать мышкой столько, на сколько хватит терпения. И каждая волна будет распространятся по своему закону, расширяясь и отражаясь от стен, но проходя сквозь другие волны.
В общем рекомендую полюбоваться (код для FB, в FBE Windows GUI) :
Название: 1234m.gif
Просмотров: 69

Размер: 192.3 Кб



QBasic/QuickBASIC
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
ScreenRes 600, 400
 
DIM i AS INTEGER,k AS INTEGER,j AS INTEGER
DIM TestMouse AS INTEGER, MouseX AS INTEGER, MouseY AS INTEGER,Buttons AS INTEGER
DIM Colors AS INTEGER
DIM AS INTEGER X = 600
DIM AS INTEGER Y = 400
DIM AS DOUBLE Dampening = 0.995
DIM Buffer(X*2-1,Y-1) AS DOUBLE
 PRINT "Right buttion - Exit"
 PRINT "Left buttion - Start "
 SLEEP 2000
 
DO UNTIL Buttons=2
    
    TestMouse=GetMouse(MouseX,MouseY,,Buttons)
IF Buttons=1 THEN
     Buffer(MouseX,MouseY)=20
EndIf   
 
    FOR k = 1 TO X-2
            i=k+X
            FOR j=1 TO Y-2
              Buffer(i,j)=((Buffer(k-1,j)+Buffer(k+1,j)+Buffer(k,j-1)+Buffer(k,j+1))*0.5-Buffer(i,j))*Dampening           
            NEXT
    NEXT
         
          FOR i = 1 TO X-2
            k=i+X
            FOR j=1 TO Y-2
              Buffer(i,j)=((Buffer(k-1,j)+Buffer(k+1,j)+Buffer(k,j-1)+Buffer(k,j+1))*0.5-Buffer(i,j))*Dampening   
                 Colors = INT(Buffer(i,j)*10)         
              PSET(i,j),RGB(Colors,Colors,Colors)
            NEXT
          NEXT
LOOP 
 
 SLEEP 300
Есть аналогичный код на PureBasic с оф. английского форума.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2018, 22:54
Ответы с готовыми решениями:

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

Графика. Круги на воде
Не знаю к какому разделу относиться;) В технаре задали сделать картинку Круг а в кругу ещё 3-4 круга Большой Меньше Меньше и меньше ...

Круги на воде
Ребят, задали написать прогу бассейн с водой, в него кинули камень и от камня пошли круги по воде, подскажите с чего начать

5
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
11.05.2018, 13:43
Pro_grammer, спасибо за интересную прогу. Принцип бы поподробнее.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
11.05.2018, 16:54  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Принцип бы поподробнее.
Quiet Snow, матрицы. Мы все живем в матрице, и круги на воде там уже кем то запрограммированы.
А если серьёзно, то я сам всего лишь прочитал гугло-перевод той статьи, ссылка на которую есть в первом сообщении, конкретно ни чего не понял, в частности, почему именно круги, а не скажем квадраты или звездочки, и решил, что это магия.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
11.05.2018, 18:31
Pro_grammer, я понял только одно, что основано оно на сглаживании с ядром в
виде матрицы из коэф-тов, а эмулировнаие идёт за счёт "контроля объёма воды", т.е.
в массиве мы имеем высоту водной поверхности. Довольно упрощённая эмуляция.
На вид прикольно. Попробовал цвета в порядок привести, т.е. динамический диапазон.
Надо изучить как оно работает. Мне нужны такие штуки.

QBasic/QuickBASIC
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
DIM ix2 AS INTEGER, ix AS INTEGER, iy AS INTEGER
DIM TestMouse AS INTEGER, MouseX AS INTEGER, MouseY AS INTEGER,Buttons AS INTEGER
DIM Cv AS BYTE
DIM AS INTEGER X = 320
DIM AS INTEGER Y = 200
DIM AS DOUBLE Dampening = 0.995
DIM Bf(X * 2 - 1,Y - 1) AS DOUBLE
 PRINT "Right buttion - Exit"
 PRINT "Left buttion - Start "
 'SLEEP 2000
 
SCREENRES X, Y, 32, 2
SCREENSET 1, 0
DO
    
    TestMouse = GetMouse(MouseX,MouseY,,Buttons)
IF Buttons = 1 THEN
     Bf(MouseX,MouseY) = 1
ENDIF   
 
FOR ix = 1 TO X - 2
   ix2 = ix + X
   FOR iy = 1 TO Y - 2
   Bf(ix2, iy) = ((Bf(ix - 1, iy) + Bf(ix + 1, iy) + Bf(ix, iy - 1) + Bf(ix, iy + 1)) * 0.5 - Bf(ix2, iy)) * Dampening           
   NEXT
NEXT
         
FOR ix = 1 TO X - 2
   ix2 = ix + X
   FOR iy = 1 TO Y - 2
   Bf(ix, iy) = ((Bf(ix2 - 1, iy) + Bf(ix2 + 1, iy) + Bf(ix2, iy - 1) + Bf(ix2, iy + 1)) * 0.5 - Bf(ix, iy)) * Dampening           
     Cv = CBYTE((Bf(ix2, iy) + .38) * 110 )
     PSET(ix, iy), RGB(Cv, Cv, Cv)
   NEXT
NEXT
 FLIP
LOOP UNTIL INKEY = CHR(27)
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
11.05.2018, 20:51  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Попробовал цвета в порядок привести
Замечательно! Если ЛКМ не отпускать, и двигать, то как пальцем по воде провести!
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
14.05.2018, 07:33
Цитата Сообщение от Pro_grammer Посмотреть сообщение
ScreenRes 600, 400
Хах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2018, 07:33
Помогаю со студенческими работами здесь

Круги на воде
Экран изображает бассейн с водой, в который бросили камень(в заданных координатах). От камня пошли круги, которые, дойдя до стенок...

Круги на воде
Плиззз! помогите - очень надо написать код для создания графического эффекта "круги на воде"! или алгоритм его создания.. ну или...

Круги на воде
Получить мультфильм "Круги на воде", используя семь концентрических окружностей. Центры окружностей должны быть совмещены с центром экрана,...

Программа круги на воде
Здравствуйте, помогите с программой имитирующую круги на воде: нужно чтобы в случайных местах экрана возникали и начинают расти с...

Нарисовать круги на воде
for(i=0;i<30;i++) { for(int it=0; it<30; it++) { for(int q=0; q<360; q++) { C_X=i*sin(q); ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru