roboforum.ru

Технический форум по робототехнике.


Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение Scorpio » 11 июл 2020, 20:12

Круть! Я даже скачал Processing, чтобы попробовать твой скетч.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 11 июл 2020, 20:30


Код: Выделить всёРазвернуть
//3D processing //
//ВИРТУАЛЬНЫЙ ИСПОЛНИТЕЛЬ ЭФФЕКТОВ СВЕТОДИОДНОГО КУБА 6*6*6//
float rotX = 0.0, rotY = 0.0;
int lastX, lastY;
float distX = 0.0, distY = 0.0;
float X,Y;
int x=0,y=0,z=0;//счётчики - координаты
int i;//счётчик
int s=0;//счётчик
int ss=0;//счётчик
int sss=0;//счётчик
int R=25;//размер куба в окне
int fl=1;//флаг состояний (управляет сменой режимов внешнего вида куба)
int k=0;//счётчик
int j=0;//счётчик
boolean fl_A=true;//флаг состояний (управление переключением эффекта)
boolean fl_B=true;//флаг состояний (управляет сменой направлений вращения куба при автономном режиме)
int r=0,g=255,b=0;//составляющие цвета
int color_=0;//счётчик цвета
int n=50;//скорость анимации
int T=0;//переменная хранения моментов времени
int m=0;//счётчик
boolean fl_C=true;//флаг состояний (управляет сменой ручного и автоматического вращения куба )

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// массив данных нескольких эффектов ////////////////////////////////
int []tabl_dano={5,227,
4,11,41,227,
3,10,17,40,47,77,227,
2,9,16,23,39,46,53,76,83,113,227,
1,8,15,22,29,38,45,52,59,75,82,89,112,119,149,227,
0,7,14,21,28,35,37,44,51,58,65,74,81,88,95,111,118,125,148,155,185,227,
6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,110,117,124,131,147,154,161,184,191,227,
12,19,26,33,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,146,153,160,167,183,190,227,
18,25,32,48,55,62,69,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,182,189,196,203,227,
24,31,54,61,68,84,91,98,105,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,227,
30,60,67,90,97,104,120,127,134,141,150,157,164,171,178,180,187,194,201,208,215,227,
66,96,103,126,133,140,156,163,170,177,186,193,200,207,214,227,
102,132,139,162,169,176,192,199,206,213,227,
138,168,175,198,205,212,227,
174,204,211,227,
210,227,
255,//ЭФФЕКТ СЛОЙ ДВИЖЕТСЯ ПО ДИАГОНАЛИ КУБА СНИЗУ ВВЕРХ, СЛЕВА НАПРОВО, ВГЛУБЬ//
0,7,14,21,28,35,36,43,50,57,64,71,72,79,86,93,100,107,108,115,122,129,136,143,144,151,158,165,172,179,180,187,194,201,208,215,227,
1,6,13,20,27,34,37,42,49,56,63,70,73,78,85,92,99,106,109,114,121,128,135,142,145,150,157,164,171,178,181,193,200,207,214,227,
2,7,12,19,26,38,43,48,55,62,69,74,79,84,91,98,105,110,115,120,127,134,141,146,151,156,163,170,177,182,187,192,199,206,213,227,
3,8,13,18,25,32,39,44,49,54,61,68,75,80,85,90,97,104,111,116,121,126,133,140,147,152,157,162,169,176,183,188,193,198,205,212,227,
4,9,14,19,24,31,40,45,50,55,60,67,76,81,86,91,96,103,112,117,122,127,132,139,148,153,158,163,168,175,184,189,194,199,204,211,227,
5,10,15,20,25,30,41,46,51,56,61,66,77,82,87,92,97,102,113,118,123,128,133,138,149,154,159,164,169,174,185,190,195,200,205,210,227,
4,11,16,21,26,31,40,47,52,57,62,67,76,83,88,93,98,103,112,119,124,129,134,139,148,155,160,165,170,175,184,191,196,201,206,211,227,
3,10,17,22,27,32,39,46,53,58,63,68,75,82,89,94,99,104,111,118,125,130,135,140,147,154,161,166,171,176,183,190,197,202,207,212,227,
2,9,16,23,28,33,38,45,52,59,64,69,74,81,88,95,100,105,110,117,124,131,136,141,146,153,160,167,172,177,182,189,196,203,208,213,227,
1,8,15,22,29,34,37,44,51,58,65,70,73,80,87,94,101,106,109,116,123,130,137,142,145,152,159,166,173,178,181,188,195,202,209,214,227,
255,//ЭФФЕКТ ВОЛНА//
4,5,10,11,40,41,46,47,227,
3,4,5,9,11,15,16,17,39,41,51,53,75,76,77,81,83,87,88,89,227,
2,3,4,5,8,11,14,17,20,21,22,23,38,41,56,59,74,77,92,95,110,111,112,113,116,119,122,125,128,129,130,131,227,
1,2,3,4,5,7,11,13,17,19,23,25,26,27,28,29,37,41,61,65,73,77,97,101,109,113,133,137,145,146,147,148,149,151,155,157,161,163,167,169,170,171,172,173,227,
0,1,2,3,4,5,6,11,12,17,18,23,24,29,30,31,32,33,34,35,36,41,66,71,72,77,102,107,108,113,126,138,143,144,149,174,179,180,181,182,183,184,185,186,191,192,197,198,203,204,209,210,211,212,213,214,215,227,
42,43,44,45,46,48,52,54,58,60,64,66,70,78,82,102,106,114,118,138,142,150,154,174,178,186,187,188,189,190,192,196,198,202,204,208,210,211,212,213,214,227,
84,85,86,87,90,93,96,99,102,103,104,105,120,123,138,141,156,159,174,177,192,193,194,195,198,201,204,207,210,211,212,213,227,
126,127,128,132,134,138,139,140,162,164,174,176,198,199,200,204,206,210,211,212,227,
168,169,174,175,204,205,210,211,227,
255,//ЭФФЕКТ НАРАСТАНИЕ И УМЕНЬШЕНИЕ КОНТУРА КУБА ПО ДИАГОНАЛИ//
3,8,26,33,38,49,55,68,79,84,90,97,115,120,126,133,146,157,163,176,183,188,206,213,227,
2,7,25,32,37,48,54,67,78,84,90,96,114,120,126,132,145,156,162,175,182,187,205,212,227,
1,6,24,31,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,181,186,204,211,227,
0,6,24,30,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,48,54,66,78,85,91,96,114,121,127,132,138,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,49,55,61,66,79,86,92,97,115,122,128,133,144,157,163,174,180,186,204,210,227,
0,7,25,30,37,50,56,67,80,87,93,98,116,123,129,134,145,158,164,175,180,187,205,210,227,
1,8,26,31,38,51,57,68,81,88,94,99,117,124,130,135,146,159,165,176,181,188,206,211,227,
2,9,27,32,39,52,58,69,82,89,95,100,118,125,131,136,147,160,166,177,182,189,207,212,227,
3,10,28,33,40,53,59,70,83,89,95,101,119,125,131,137,148,161,167,178,183,190,208,213,227,
4,11,29,34,41,53,59,71,83,89,95,101,107,119,125,131,137,149,161,167,179,184,191,209,214,227,
5,11,29,35,41,53,59,71,83,89,95,101,119,125,131,137,143,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,53,59,71,83,88,94,101,119,124,130,137,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,52,58,71,82,87,93,100,118,123,129,136,149,160,166,179,185,191,209,215,227,
5,10,28,35,40,51,57,70,81,86,92,99,117,122,128,135,148,159,165,178,185,190,208,215,227,
4,9,27,34,39,50,56,69,80,85,91,98,116,121,127,134,147,158,164,177,184,189,207,214,227,
255,//ЭФФЕКТ ВЫТРЯХИВАНИЯ КОВРА//
0,7,14,21,28,35,37,44,51,58,65,70,74,81,88,95,100,105,111,118,125,130,135,140,148,155,160,165,170,175,185,190,195,200,205,210,227,
1,8,15,22,29,34,38,45,52,59,64,69,75,82,89,94,99,104,112,119,124,129,134,139,149,154,159,164,169,174,184,189,194,199,204,211,227,
2,9,16,23,28,33,39,46,53,58,63,68,76,83,88,93,98,103,113,118,123,128,133,138,148,153,158,163,168,175,183,188,193,198,205,212,227,
3,10,17,22,27,32,40,47,52,57,62,67,77,82,87,92,97,102,112,117,122,127,132,139,147,152,157,162,169,176,182,187,192,199,206,213,227,
4,11,16,21,26,31,41,46,51,56,61,66,76,81,86,91,96,103,111,116,121,126,133,140,146,151,156,163,170,177,181,186,193,200,207,214,227,
5,10,15,20,25,30,40,45,50,55,60,67,75,80,85,90,97,104,110,115,120,127,134,141,145,150,157,164,171,178,180,187,194,201,208,215,227,
4,9,14,19,24,31,39,44,49,54,61,68,74,79,84,91,98,105,109,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,214,227,
3,8,13,18,25,32,38,43,48,55,62,69,73,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,178,182,189,196,203,208,213,227,
2,7,12,19,26,33,37,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,142,146,153,160,167,172,177,183,190,197,202,207,212,227,
1,6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,101,106,110,117,124,131,136,141,147,154,161,166,171,176,184,191,196,201,206,211,227,
255,//ВОЛНА-ГОРА//
300};
int []tabl_eff=new int[600];
////////////////////////////////////////////////////////////////////////
void setup()
{
size(500, 500, P3D);
//noStroke();
stroke(0,100,100);
frameRate(70);//число кадров в секунду
}
////////////////////////////////////////////////////////////////////////
void draw()
{delay(n);//скорость анимации регулирует
//////////////////////////////////////////////////
i=0;
while(fl_A==true){tabl_eff[i]=tabl_dano[j];if(tabl_dano[j]==255){fl_A=false;s=0;}i++;j++;if(tabl_dano[j]==300){j=0;}}//запись в массив текущего эффекта
k++;if(k>300){fl_A=true;k=0;}//число циклов draw на 1 эффект

/////////////////////////////////////////////////
background(0); lights();
translate(width/2, (height/2)-50);
/////////  навигация исполнения эффектов ////////
if(fl_C==true)
{
//if (mousePressed && (mouseButton == LEFT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
//if (mousePressed && (mouseButton == RIGHT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
if (mousePressed && (mouseButton == LEFT)){X=rotX + distY; Y=rotY + distX;fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
if (mousePressed && (mouseButton == RIGHT)){X=rotX + distY; Y=rotY + distX;fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
rotateX(X); rotateY(Y);
} else{avtonom();}
if (mousePressed && (mouseButton == CENTER)){noLoop();delay(3000);loop();}// если нажата центральная кнопка мыши то стоп кадр
if (keyPressed&&key == ' ') {fl_A=true;k=0;}//если нажат пробел переходим к следующему эффекту
if (keyPressed&&(key == 'ц'||key == 'Ц'||key == 'w'||key == 'W')) {color_smena();}//если нажата клавиша "W"(Ц) меняем цвет куба

if (keyPressed&&(key == 'v'||key == 'V'||key == 'м'||key == 'М')){n=n+50;if(n>150){n=50;}delay(100);}// если нажата клавиша "V"(М)меняем скорость исполнения эффекта
if (keyPressed&&(key == 'a'||key == 'A'||key == 'ф'||key == 'Ф')){fl_C=!fl_C;delay(100);}// если нажата клавиша "A"(Ф)меняем автономный и ручной режимы
/////////////////////////////////////////////////
/////// перебор кадров в эффекте ///////////////
/////////////////////////////////////////////////

for (i=s+1;i<tabl_eff.length;i++) 
{

if(tabl_eff[i]==255){s=0;ss=sss;break;} 
if(tabl_eff[i]==227){ss=i;if(s==0){sss=i;}break;}
}

////////////////////////////////////////////////
////// построение изображения куба в кадре //////////////
/////////////////////////////////////////////// 
for (x=-2;x<4;x++)
{
  for (y=-2;y<4;y++)
  {
   for (z=-2;z<4;z++)
  {
if(fl==1){translate(2*R*x,2*R*y,2*R*z);strokeWeight(1);noFill();box(R/2);translate(-2*R*x,-2*R*y,-2*R*z);}// условие видимости всего куба
for (i=s;i<ss;i++) 
{
if((x+2)+(y+2)*6+(z+2)*36==tabl_eff[i]){translate(2*R*x,2*R*y,2*R*z);strokeWeight(1);fill(r, g, b);box(R/2);translate(-2*R*x,-2*R*y,-2*R*z);}

}
  }
}
}
s=ss;
if(fl==0){strokeWeight(R/5);translate(R,R,R);noFill();box(12*R);}//рамка - куб при невидимости всего куба
if(fl==1){strokeWeight(R/5);translate(R,8*R,R);noFill();box(13*R,2*R,13*R);}//рамка - основание куба при его видимости
/////////////////////////////////////////////////
}


/////////////////// функции положения курсора и вращения колеса ////////////////////////////////////////////
void mousePressed() { lastX = mouseX; lastY = mouseY; }
void mouseDragged() {  distX = radians(mouseX - lastX); distY = radians(lastY - mouseY); }
void mouseReleased() {  rotX += distY; rotY += distX;distX = distY = 0.0;  }
void mouseWheel(MouseEvent event){R=R+5*event.getCount();}//приближение-удаление куба с помощью колеса мыши
////////////////// функция автономного вращения куба //////////////////////////
void avtonom()
{
  if(fl_B==true){rotateY(2*PI*m/256);}else{rotateY(-2*PI*m/256);}
  if(millis()-T>n){T=millis();m++;if(m>255){m=0;fl_B=!fl_B;color_smena();fl_A=true;k=0;}}
}
///////////// функция смены цвета ///////////////
void color_smena()
{
  color_++;
if(color_>6){color_=0;}if(color_==0){r=0;g=255;b=0;}if(color_==1){r=255;g=0;b=0;}if(color_==2){r=0;g=0;b=255;}if(color_==3){r=0;g=255;b=255;}if(color_==4){r=255;g=255;b=255;}
if(color_==5){r=255;g=255;b=0;}if(color_==6){r=255;g=0;b=255;}
}

Добавил ещё автоном - сам крутится,меняет цвета и эффекты. Клавиши управления (краткие нажатия-перебор) - "W"(цвета),"A"(автоном-ручное вращение),"V"(скорость),"пробел"(следующий эффект). Нажатие колеса - стоп кадр.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 12 июл 2020, 16:15

Решил напоследок добавить в регулировки и выбор форм с их размерами. 3Д примитивов в процессенге только куб и сфера (от неё скорость воспроизведения сразу рухнула), пришлось из 2Д собирать 3Д.

Добавлено спустя 24 минуты 39 секунд:
Код: Выделить всёРазвернуть
//3D processing //
//ВИРТУАЛЬНЫЙ ИСПОЛНИТЕЛЬ ЭФФЕКТОВ СВЕТОДИОДНОГО КУБА 6*6*6//
float rotX = 0.0, rotY = 0.0;
int lastX, lastY;
float distX = 0.0, distY = 0.0;
float X,Y;
int x=0,y=0,z=0;//счётчики - координаты
int i;//счётчик
int s=0;//счётчик
int ss=0;//счётчик
int sss=0;//счётчик
int R=25;//размер куба в окне
int fl=1;//флаг состояний (управляет сменой режимов внешнего вида куба)
int k=0;//счётчик
int j=0;//счётчик
int raz=2;//коэффициент влияющий на размер элемента куба
boolean fl_A=true;//флаг состояний (управление переключением эффекта)
boolean fl_B=true;//флаг состояний (управляет сменой направлений вращения куба при автономном режиме)
int r=0,g=255,b=0;//составляющие цвета
int color_=0;//счётчик цвета
int forma_=0;//счётчик формы элемента куба
int n=50;//скорость анимации
int T=0;//переменная хранения моментов времени
int m=0;//счётчик
boolean fl_C=true;//флаг состояний (управляет сменой ручного и автоматического вращения куба )

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// массив данных нескольких эффектов ////////////////////////////////
int []tabl_dano={5,227,
4,11,41,227,
3,10,17,40,47,77,227,
2,9,16,23,39,46,53,76,83,113,227,
1,8,15,22,29,38,45,52,59,75,82,89,112,119,149,227,
0,7,14,21,28,35,37,44,51,58,65,74,81,88,95,111,118,125,148,155,185,227,
6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,110,117,124,131,147,154,161,184,191,227,
12,19,26,33,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,146,153,160,167,183,190,227,
18,25,32,48,55,62,69,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,182,189,196,203,227,
24,31,54,61,68,84,91,98,105,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,227,
30,60,67,90,97,104,120,127,134,141,150,157,164,171,178,180,187,194,201,208,215,227,
66,96,103,126,133,140,156,163,170,177,186,193,200,207,214,227,
102,132,139,162,169,176,192,199,206,213,227,
138,168,175,198,205,212,227,
174,204,211,227,
210,227,
255,//ЭФФЕКТ СЛОЙ ДВИЖЕТСЯ ПО ДИАГОНАЛИ КУБА СНИЗУ ВВЕРХ, СЛЕВА НАПРОВО, ВГЛУБЬ//
0,7,14,21,28,35,36,43,50,57,64,71,72,79,86,93,100,107,108,115,122,129,136,143,144,151,158,165,172,179,180,187,194,201,208,215,227,
1,6,13,20,27,34,37,42,49,56,63,70,73,78,85,92,99,106,109,114,121,128,135,142,145,150,157,164,171,178,181,193,200,207,214,227,
2,7,12,19,26,38,43,48,55,62,69,74,79,84,91,98,105,110,115,120,127,134,141,146,151,156,163,170,177,182,187,192,199,206,213,227,
3,8,13,18,25,32,39,44,49,54,61,68,75,80,85,90,97,104,111,116,121,126,133,140,147,152,157,162,169,176,183,188,193,198,205,212,227,
4,9,14,19,24,31,40,45,50,55,60,67,76,81,86,91,96,103,112,117,122,127,132,139,148,153,158,163,168,175,184,189,194,199,204,211,227,
5,10,15,20,25,30,41,46,51,56,61,66,77,82,87,92,97,102,113,118,123,128,133,138,149,154,159,164,169,174,185,190,195,200,205,210,227,
4,11,16,21,26,31,40,47,52,57,62,67,76,83,88,93,98,103,112,119,124,129,134,139,148,155,160,165,170,175,184,191,196,201,206,211,227,
3,10,17,22,27,32,39,46,53,58,63,68,75,82,89,94,99,104,111,118,125,130,135,140,147,154,161,166,171,176,183,190,197,202,207,212,227,
2,9,16,23,28,33,38,45,52,59,64,69,74,81,88,95,100,105,110,117,124,131,136,141,146,153,160,167,172,177,182,189,196,203,208,213,227,
1,8,15,22,29,34,37,44,51,58,65,70,73,80,87,94,101,106,109,116,123,130,137,142,145,152,159,166,173,178,181,188,195,202,209,214,227,
255,//ЭФФЕКТ ВОЛНА//
4,5,10,11,40,41,46,47,227,
3,4,5,9,11,15,16,17,39,41,51,53,75,76,77,81,83,87,88,89,227,
2,3,4,5,8,11,14,17,20,21,22,23,38,41,56,59,74,77,92,95,110,111,112,113,116,119,122,125,128,129,130,131,227,
1,2,3,4,5,7,11,13,17,19,23,25,26,27,28,29,37,41,61,65,73,77,97,101,109,113,133,137,145,146,147,148,149,151,155,157,161,163,167,169,170,171,172,173,227,
0,1,2,3,4,5,6,11,12,17,18,23,24,29,30,31,32,33,34,35,36,41,66,71,72,77,102,107,108,113,126,138,143,144,149,174,179,180,181,182,183,184,185,186,191,192,197,198,203,204,209,210,211,212,213,214,215,227,
42,43,44,45,46,48,52,54,58,60,64,66,70,78,82,102,106,114,118,138,142,150,154,174,178,186,187,188,189,190,192,196,198,202,204,208,210,211,212,213,214,227,
84,85,86,87,90,93,96,99,102,103,104,105,120,123,138,141,156,159,174,177,192,193,194,195,198,201,204,207,210,211,212,213,227,
126,127,128,132,134,138,139,140,162,164,174,176,198,199,200,204,206,210,211,212,227,
168,169,174,175,204,205,210,211,227,
255,//ЭФФЕКТ НАРАСТАНИЕ И УМЕНЬШЕНИЕ КОНТУРА КУБА ПО ДИАГОНАЛИ//
3,8,26,33,38,49,55,68,79,84,90,97,115,120,126,133,146,157,163,176,183,188,206,213,227,
2,7,25,32,37,48,54,67,78,84,90,96,114,120,126,132,145,156,162,175,182,187,205,212,227,
1,6,24,31,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,181,186,204,211,227,
0,6,24,30,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,48,54,66,78,85,91,96,114,121,127,132,138,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,49,55,61,66,79,86,92,97,115,122,128,133,144,157,163,174,180,186,204,210,227,
0,7,25,30,37,50,56,67,80,87,93,98,116,123,129,134,145,158,164,175,180,187,205,210,227,
1,8,26,31,38,51,57,68,81,88,94,99,117,124,130,135,146,159,165,176,181,188,206,211,227,
2,9,27,32,39,52,58,69,82,89,95,100,118,125,131,136,147,160,166,177,182,189,207,212,227,
3,10,28,33,40,53,59,70,83,89,95,101,119,125,131,137,148,161,167,178,183,190,208,213,227,
4,11,29,34,41,53,59,71,83,89,95,101,107,119,125,131,137,149,161,167,179,184,191,209,214,227,
5,11,29,35,41,53,59,71,83,89,95,101,119,125,131,137,143,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,53,59,71,83,88,94,101,119,124,130,137,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,52,58,71,82,87,93,100,118,123,129,136,149,160,166,179,185,191,209,215,227,
5,10,28,35,40,51,57,70,81,86,92,99,117,122,128,135,148,159,165,178,185,190,208,215,227,
4,9,27,34,39,50,56,69,80,85,91,98,116,121,127,134,147,158,164,177,184,189,207,214,227,
255,//ЭФФЕКТ ВЫТРЯХИВАНИЯ КОВРА//
0,7,14,21,28,35,37,44,51,58,65,70,74,81,88,95,100,105,111,118,125,130,135,140,148,155,160,165,170,175,185,190,195,200,205,210,227,
1,8,15,22,29,34,38,45,52,59,64,69,75,82,89,94,99,104,112,119,124,129,134,139,149,154,159,164,169,174,184,189,194,199,204,211,227,
2,9,16,23,28,33,39,46,53,58,63,68,76,83,88,93,98,103,113,118,123,128,133,138,148,153,158,163,168,175,183,188,193,198,205,212,227,
3,10,17,22,27,32,40,47,52,57,62,67,77,82,87,92,97,102,112,117,122,127,132,139,147,152,157,162,169,176,182,187,192,199,206,213,227,
4,11,16,21,26,31,41,46,51,56,61,66,76,81,86,91,96,103,111,116,121,126,133,140,146,151,156,163,170,177,181,186,193,200,207,214,227,
5,10,15,20,25,30,40,45,50,55,60,67,75,80,85,90,97,104,110,115,120,127,134,141,145,150,157,164,171,178,180,187,194,201,208,215,227,
4,9,14,19,24,31,39,44,49,54,61,68,74,79,84,91,98,105,109,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,214,227,
3,8,13,18,25,32,38,43,48,55,62,69,73,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,178,182,189,196,203,208,213,227,
2,7,12,19,26,33,37,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,142,146,153,160,167,172,177,183,190,197,202,207,212,227,
1,6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,101,106,110,117,124,131,136,141,147,154,161,166,171,176,184,191,196,201,206,211,227,
255,//ВОЛНА-ГОРА//
300};
int []tabl_eff=new int[600];
////////////////////////////////////////////////////////////////////////
void setup()
{
size(500, 500, P3D);
//noStroke();
stroke(0,100,100);
frameRate(70);//число кадров в секунду
}
////////////////////////////////////////////////////////////////////////
void draw()
{delay(n);//скорость анимации регулирует
//////////////////////////////////////////////////
i=0;
while(fl_A==true){tabl_eff[i]=tabl_dano[j];if(tabl_dano[j]==255){fl_A=false;s=0;}i++;j++;if(tabl_dano[j]==300){j=0;}}//запись в массив текущего эффекта
k++;if(k>300){fl_A=true;k=0;}//число циклов draw на 1 эффект

/////////////////////////////////////////////////
background(0); lights();
translate(width/2, (height/2)-50);
/////////  навигация исполнения эффектов ////////
if(fl_C==true)
{
//if (mousePressed && (mouseButton == LEFT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
//if (mousePressed && (mouseButton == RIGHT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
if (mousePressed && (mouseButton == LEFT)){X=rotX + distY; Y=rotY + distX;fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
if (mousePressed && (mouseButton == RIGHT)){X=rotX + distY; Y=rotY + distX;fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
rotateX(X); rotateY(Y);
} else{avtonom();}
if (mousePressed && (mouseButton == CENTER)){noLoop();delay(3000);loop();}// если нажата центральная кнопка мыши то стоп кадр
if (keyPressed&&key == ' ') {fl_A=true;k=0;}//если нажат пробел переходим к следующему эффекту
if (keyPressed&&(key == 'ц'||key == 'Ц'||key == 'w'||key == 'W')) {color_smena();}//если нажата клавиша "W"(Ц) меняем цвет куба

if (keyPressed&&(key == 'v'||key == 'V'||key == 'м'||key == 'М')){n=n+50;if(n>150){n=50;}delay(100);}// если нажата клавиша "V"(М)меняем скорость исполнения эффекта
if (keyPressed&&(key == 'a'||key == 'A'||key == 'ф'||key == 'Ф')){fl_C=!fl_C;delay(100);}// если нажата клавиша "A"(Ф)меняем автономный и ручной режимы
if (keyPressed&&(key == 'r'||key == 'R'||key == 'к'||key == 'К')){raz=raz*2;if(raz>4){raz=1;}delay(100);}// если нажата клавиша "R"(К)меняем размер элемента куба
if (keyPressed&&(key == 'f'||key == 'F'||key == 'а'||key == 'А')){forma_++;if(forma_>2){forma_=0;}delay(100);}// если нажата клавиша "F"(А)меняем форму элемента куба
/////////////////////////////////////////////////
/////// перебор кадров в эффекте ///////////////
/////////////////////////////////////////////////

for (i=s+1;i<tabl_eff.length;i++) 
{

if(tabl_eff[i]==255){s=0;ss=sss;break;} 
if(tabl_eff[i]==227){ss=i;if(s==0){sss=i;}break;}
}

////////////////////////////////////////////////
////// построение изображения куба в кадре //////////////
/////////////////////////////////////////////// 
for (x=-2;x<4;x++)
{
  for (y=-2;y<4;y++)
  {
   for (z=-2;z<4;z++)
  {
if(fl==1){translate(2*R*x,2*R*y,2*R*z);strokeWeight(1);noFill();forma();translate(-2*R*x,-2*R*y,-2*R*z);}// условие видимости всего куба
for (i=s;i<ss;i++) 
{
if((x+2)+(y+2)*6+(z+2)*36==tabl_eff[i]){translate(2*R*x,2*R*y,2*R*z);strokeWeight(0.1);fill(r, g, b);forma();translate(-2*R*x,-2*R*y,-2*R*z);}

}
  }
}
}
s=ss;
if(fl==0){strokeWeight(R/5);translate(R,R,R);noFill();box(12*R);}//рамка - куб при невидимости всего куба
if(fl==1){strokeWeight(R/5);translate(R,8*R,R);noFill();box(13*R,2*R,13*R);}//рамка - основание куба при его видимости
/////////////////////////////////////////////////
}


/////////////////// функции положения курсора и вращения колеса ////////////////////////////////////////////
void mousePressed() { lastX = mouseX; lastY = mouseY; }
void mouseDragged() {  distX = radians(mouseX - lastX); distY = radians(lastY - mouseY); }
void mouseReleased() {  rotX += distY; rotY += distX;distX = distY = 0.0;  }
void mouseWheel(MouseEvent event){R=R+5*event.getCount();}//приближение-удаление куба с помощью колеса мыши
////////////////// функция автономного вращения куба //////////////////////////
void avtonom()
{
  if(fl_B==true){rotateY(2*PI*m/256);}else{rotateY(-2*PI*m/256);}
  if(millis()-T>n){T=millis();m++;if(m>255){m=0;fl_B=!fl_B;color_smena();fl_A=true;k=0;}}
}
///////////// функция смены цвета ///////////////
void color_smena()
{
  color_++;
if(color_>7){color_=0;}if(color_==0){r=0;g=255;b=0;}if(color_==1){r=255;g=0;b=0;}if(color_==2){r=0;g=0;b=255;}if(color_==3){r=0;g=255;b=255;}if(color_==4){r=255;g=255;b=255;}
if(color_==5){r=255;g=255;b=0;}if(color_==6){r=255;g=0;b=255;}if(color_==7){r=255;g=127;b=0;}
}
/////////// функция смены формы элемента куба ////////////
void forma()
{
  if(forma_==0){box(R/raz);}//форма пикселя куб
  if(forma_==1){//форма пикселя шару подобная
ellipse(0, 0,R/raz,R/raz);
rotateX(PI/2);ellipse(0, 0,R/raz,R/raz);rotateX(-PI/2);
rotateX(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateX(PI/4);
rotateX(PI/4);ellipse(0, 0,R/raz,R/raz);rotateX(-PI/4);
rotateY(PI/2);ellipse(0, 0,R/raz,R/raz);rotateY(-PI/2);
rotateY(PI/4);ellipse(0, 0,R/raz,R/raz);rotateY(-PI/4);
rotateY(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateY(PI/4);
rotateZ(PI/4);ellipse(0, 0,R/raz,R/raz);rotateZ(-PI/4);
rotateZ(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateZ(PI/4);
rotateZ(PI/2);ellipse(0, 0,R/raz,R/raz);rotateZ(-PI/2);
}
if(forma_==2)//форма пикселя светодиоду подобная
{
rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);
rotateY(PI/2);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(-PI/2);
rotateY(PI/4);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(-PI/4);
rotateY(-PI/4);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(PI/4);
rotateX(PI/2);ellipse(0,0,R/raz,R/raz);translate(0,0,-R/raz);ellipse(0,0,R/raz,R/raz);translate(0,0,R/raz);rotateX(-PI/2);
}
}
//////////////////////////////////////////////////////////

Клавиша "R" регулирует размер пикселя,"F" регулирует его внешний вид.
Вложения
скрин5.jpg
скрин6.jpg
скрин7.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 12 июл 2020, 19:20

Да, все работает. Особенно прикольно, когда попадаешь внутрь куба. А звук можешь приделать, чтобы в такт музыке картинка менялась?
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 12 июл 2020, 19:55

Не знаю, работает ли processing напрямую со звуком?
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 12 июл 2020, 20:34

Ну дык разберись. А заодно сделай повторение на физическом кубике в реальном времени.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 13 июл 2020, 07:02

Код: Выделить всёРазвернуть
import processing.sound.*;
SoundFile file;
AudioIn in;
float amp;
void setup() {
  size(640, 360);
  background(255);
   
  // загружаем аудиофайл из папки «data» скетча и проигрываем его:
  file = new SoundFile(this, "proba.mp3");
  file.play();
  // создаем входящий поток аудиоданных:
  in = new AudioIn(this,0);
  in.start(amp);
}     

void draw() {
  print(amp);//печатаем значение переменной
}

Нашёл библиотеку и функцию подходящую, но не работает пример, данные по 0.
http://wikihandbk.com/wiki/Processing:Библиотеки/Sound/Класс_AudioIn
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 13 июл 2020, 19:49

Попробуй пример PeakAmplitude из библиотеки Sound. У меня работает.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 13 июл 2020, 20:38

Спасибо за совет, попробую.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 14 июл 2020, 09:22

Код: Выделить всёРазвернуть
import processing.sound.*;
Amplitude amp;
//AudioIn in;
SoundFile file;

void setup() {
  size(300, 300);
  background(0);
   
  // создаем входной поток аудиоданных,
  // который будет направлен анализатору Amplitude:
  amp = new Amplitude(this);
// in = new AudioIn(this, 0);
file = new SoundFile(this,"pro.mp3");
file.play();

// in.start();
  amp.input(file);
}     

void draw() {
  // анализируем входящие данные:
  println(100*amp.analyze());delay(100);
  if(100*amp.analyze()>35){background(255);}else{background(0);}
}

Попробовал на конкретном файле, поместив его в папку скетча-работает (экран мигает с чёрного на белый почти в такт :)).
Но на кубе идея не прошла.Специально переделал стоп-кадр под неё. Он управляется (кнопкой колеса и по замыслу музыкой) флажком fl_D - малый уровень звука (стоп кадр), достаточный (играем эффект).Но приложение перестало запускаться, выдавая красным какие то англицкие ругательства :)...Добавил для куба смену фона день-ночь-утро (кнопка "Q"). Многовато уже кнопок на клаве накопилось.
Код: Выделить всёРазвернуть
//3D processing //
//ВИРТУАЛЬНЫЙ ИСПОЛНИТЕЛЬ ЭФФЕКТОВ СВЕТОДИОДНОГО КУБА 6*6*6//
float rotX = 0.0, rotY = 0.0;
int lastX, lastY;
float distX = 0.0, distY = 0.0;
float X,Y;
int x=0,y=0,z=0;//счётчики - координаты
int i;//счётчик
int s=0;//счётчик
int ss=0;//счётчик
int sss=0;//счётчик
int R=25;//размер куба в окне
int fl=1;//флаг состояний (управляет сменой режимов внешнего вида куба)
int k=0;//счётчик
int j=0;//счётчик
int raz=2;//коэффициент влияющий на размер элемента куба
boolean fl_A=true;//флаг состояний (управление переключением эффекта)
boolean fl_B=true;//флаг состояний (управляет сменой направлений вращения куба при автономном режиме)
boolean fl_D=true;//флаг состояний (управляет стоп кадром)
int r=0,g=255,b=0;//составляющие цвета
int color_=0;//счётчик цвета
int forma_=0;//счётчик формы элемента куба
int n=50;//скорость анимации
int T=0;//переменная хранения моментов времени
int m=0;//счётчик
boolean fl_C=true;//флаг состояний (управляет сменой ручного и автоматического вращения куба )
int N=0;//переменная определяет цвет экрана (ночь,утро-вечер,день)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////// массив данных нескольких эффектов ////////////////////////////////
int []tabl_dano={5,227,
4,11,41,227,
3,10,17,40,47,77,227,
2,9,16,23,39,46,53,76,83,113,227,
1,8,15,22,29,38,45,52,59,75,82,89,112,119,149,227,
0,7,14,21,28,35,37,44,51,58,65,74,81,88,95,111,118,125,148,155,185,227,
6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,110,117,124,131,147,154,161,184,191,227,
12,19,26,33,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,146,153,160,167,183,190,227,
18,25,32,48,55,62,69,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,182,189,196,203,227,
24,31,54,61,68,84,91,98,105,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,227,
30,60,67,90,97,104,120,127,134,141,150,157,164,171,178,180,187,194,201,208,215,227,
66,96,103,126,133,140,156,163,170,177,186,193,200,207,214,227,
102,132,139,162,169,176,192,199,206,213,227,
138,168,175,198,205,212,227,
174,204,211,227,
210,227,
255,// 1 ЭФФЕКТ СЛОЙ ДВИЖЕТСЯ ПО ДИАГОНАЛИ КУБА СНИЗУ ВВЕРХ, СЛЕВА НАПРОВО, ВГЛУБЬ//
0,7,14,21,28,35,36,43,50,57,64,71,72,79,86,93,100,107,108,115,122,129,136,143,144,151,158,165,172,179,180,187,194,201,208,215,227,
1,6,13,20,27,34,37,42,49,56,63,70,73,78,85,92,99,106,109,114,121,128,135,142,145,150,157,164,171,178,181,193,200,207,214,227,
2,7,12,19,26,38,43,48,55,62,69,74,79,84,91,98,105,110,115,120,127,134,141,146,151,156,163,170,177,182,187,192,199,206,213,227,
3,8,13,18,25,32,39,44,49,54,61,68,75,80,85,90,97,104,111,116,121,126,133,140,147,152,157,162,169,176,183,188,193,198,205,212,227,
4,9,14,19,24,31,40,45,50,55,60,67,76,81,86,91,96,103,112,117,122,127,132,139,148,153,158,163,168,175,184,189,194,199,204,211,227,
5,10,15,20,25,30,41,46,51,56,61,66,77,82,87,92,97,102,113,118,123,128,133,138,149,154,159,164,169,174,185,190,195,200,205,210,227,
4,11,16,21,26,31,40,47,52,57,62,67,76,83,88,93,98,103,112,119,124,129,134,139,148,155,160,165,170,175,184,191,196,201,206,211,227,
3,10,17,22,27,32,39,46,53,58,63,68,75,82,89,94,99,104,111,118,125,130,135,140,147,154,161,166,171,176,183,190,197,202,207,212,227,
2,9,16,23,28,33,38,45,52,59,64,69,74,81,88,95,100,105,110,117,124,131,136,141,146,153,160,167,172,177,182,189,196,203,208,213,227,
1,8,15,22,29,34,37,44,51,58,65,70,73,80,87,94,101,106,109,116,123,130,137,142,145,152,159,166,173,178,181,188,195,202,209,214,227,
255,// 2 ЭФФЕКТ ВОЛНА//
4,5,10,11,40,41,46,47,227,
3,4,5,9,11,15,16,17,39,41,51,53,75,76,77,81,83,87,88,89,227,
2,3,4,5,8,11,14,17,20,21,22,23,38,41,56,59,74,77,92,95,110,111,112,113,116,119,122,125,128,129,130,131,227,
1,2,3,4,5,7,11,13,17,19,23,25,26,27,28,29,37,41,61,65,73,77,97,101,109,113,133,137,145,146,147,148,149,151,155,157,161,163,167,169,170,171,172,173,227,
0,1,2,3,4,5,6,11,12,17,18,23,24,29,30,31,32,33,34,35,36,41,66,71,72,77,102,107,108,113,126,138,143,144,149,174,179,180,181,182,183,184,185,186,191,192,197,198,203,204,209,210,211,212,213,214,215,227,
42,43,44,45,46,48,52,54,58,60,64,66,70,78,82,102,106,114,118,138,142,150,154,174,178,186,187,188,189,190,192,196,198,202,204,208,210,211,212,213,214,227,
84,85,86,87,90,93,96,99,102,103,104,105,120,123,138,141,156,159,174,177,192,193,194,195,198,201,204,207,210,211,212,213,227,
126,127,128,132,134,138,139,140,162,164,174,176,198,199,200,204,206,210,211,212,227,
168,169,174,175,204,205,210,211,227,
255,// 3 ЭФФЕКТ НАРАСТАНИЕ И УМЕНЬШЕНИЕ КОНТУРА КУБА ПО ДИАГОНАЛИ//
3,8,26,33,38,49,55,68,79,84,90,97,115,120,126,133,146,157,163,176,183,188,206,213,227,
2,7,25,32,37,48,54,67,78,84,90,96,114,120,126,132,145,156,162,175,182,187,205,212,227,
1,6,24,31,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,181,186,204,211,227,
0,6,24,30,36,48,54,66,78,84,90,96,114,120,126,132,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,48,54,66,78,85,91,96,114,121,127,132,138,144,156,162,174,180,186,204,210,227,
0,6,24,30,36,49,55,61,66,79,86,92,97,115,122,128,133,144,157,163,174,180,186,204,210,227,
0,7,25,30,37,50,56,67,80,87,93,98,116,123,129,134,145,158,164,175,180,187,205,210,227,
1,8,26,31,38,51,57,68,81,88,94,99,117,124,130,135,146,159,165,176,181,188,206,211,227,
2,9,27,32,39,52,58,69,82,89,95,100,118,125,131,136,147,160,166,177,182,189,207,212,227,
3,10,28,33,40,53,59,70,83,89,95,101,119,125,131,137,148,161,167,178,183,190,208,213,227,
4,11,29,34,41,53,59,71,83,89,95,101,107,119,125,131,137,149,161,167,179,184,191,209,214,227,
5,11,29,35,41,53,59,71,83,89,95,101,119,125,131,137,143,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,53,59,71,83,88,94,101,119,124,130,137,149,161,167,179,185,191,209,215,227,
5,11,29,35,41,52,58,71,82,87,93,100,118,123,129,136,149,160,166,179,185,191,209,215,227,
5,10,28,35,40,51,57,70,81,86,92,99,117,122,128,135,148,159,165,178,185,190,208,215,227,
4,9,27,34,39,50,56,69,80,85,91,98,116,121,127,134,147,158,164,177,184,189,207,214,227,
255,// 4 ЭФФЕКТ ВЫТРЯХИВАНИЯ КОВРА//
0,7,14,21,28,35,37,44,51,58,65,70,74,81,88,95,100,105,111,118,125,130,135,140,148,155,160,165,170,175,185,190,195,200,205,210,227,
1,8,15,22,29,34,38,45,52,59,64,69,75,82,89,94,99,104,112,119,124,129,134,139,149,154,159,164,169,174,184,189,194,199,204,211,227,
2,9,16,23,28,33,39,46,53,58,63,68,76,83,88,93,98,103,113,118,123,128,133,138,148,153,158,163,168,175,183,188,193,198,205,212,227,
3,10,17,22,27,32,40,47,52,57,62,67,77,82,87,92,97,102,112,117,122,127,132,139,147,152,157,162,169,176,182,187,192,199,206,213,227,
4,11,16,21,26,31,41,46,51,56,61,66,76,81,86,91,96,103,111,116,121,126,133,140,146,151,156,163,170,177,181,186,193,200,207,214,227,
5,10,15,20,25,30,40,45,50,55,60,67,75,80,85,90,97,104,110,115,120,127,134,141,145,150,157,164,171,178,180,187,194,201,208,215,227,
4,9,14,19,24,31,39,44,49,54,61,68,74,79,84,91,98,105,109,114,121,128,135,142,144,151,158,165,172,179,181,188,195,202,209,214,227,
3,8,13,18,25,32,38,43,48,55,62,69,73,78,85,92,99,106,108,115,122,129,136,143,145,152,159,166,173,178,182,189,196,203,208,213,227,
2,7,12,19,26,33,37,42,49,56,63,70,72,79,86,93,100,107,109,116,123,130,137,142,146,153,160,167,172,177,183,190,197,202,207,212,227,
1,6,13,20,27,34,36,43,50,57,64,71,73,80,87,94,101,106,110,117,124,131,136,141,147,154,161,166,171,176,184,191,196,201,206,211,227,
255,// 5 ВОЛНА-ГОРА//
5,10,15,20,25,30,180,187,194,201,208,215,227,
11,16,21,26,31,66,144,181,188,195,202,209,227,
17,22,27,32,67,102,108,145,182,189,196,227,
23,28,33,68,72,103,109,138,146,183,190,197,227,
29,34,36,69,73,104,110,139,147,174,184,191,227,
0,35,37,70,74,105,111,140,148,175,185,210,227,
1,6,38,71,75,106,112,141,149,176,204,211,227,
2,7,12,39,76,107,113,142,177,198,205,212,227,
3,8,13,18,40,77,143,178,192,199,206,213,227,
4,9,14,19,24,41,179,186,193,200,207,214,227,
255,// 6 ДВЕ ЗМЕЙКИ ГОНЯЮТСЯ ДРУГ ЗА ДРУГОМ//
2,7,8,9,12,13,14,15,16,19,20,21,25,26,27,31,32,33,227,
1,2,3,6,7,8,9,10,13,14,15,19,20,21,25,26,27,38,227,
0,1,2,3,4,7,8,9,13,14,15,19,20,21,37,38,39,74,227,
1,2,3,7,8,9,13,14,15,36,37,38,39,40,73,74,75,110,227,
1,2,3,7,8,9,37,38,72,73,74,75,76,109,110,111,146,227,
1,2,3,37,38,39,73,74,75,108,109,110,111,112,145,146,147,182,227,
37,38,39,73,74,75,109,110,111,144,145,146,147,148,181,182,183,188,227,
73,74,75,109,110,111,145,146,147,180,181,182,183,184,187,188,189,194,227,
109,110,111,145,146,147,181,182,183,186,187,188,189,190,193,194,195,200,227,
145,146,147,181,182,183,187,188,189,192,193,194,195,196,199,200,201,206,227,
181,182,183,187,188,189,193,194,195,198,199,200,201,202,205,206,207,212,227,
176,187,188,189,193,194,195,199,200,201,204,205,206,207,208,211,212,213,227,
140,175,176,177,193,194,195,199,200,201,205,206,207,210,211,212,213,214,227,
104,139,140,141,174,175,176,177,178,199,200,201,205,206,207,211,212,213,227,
68,103,104,105,138,139,140,141,142,175,176,177,205,206,207,211,212,213,227,
32,67,68,69,102,103,104,105,106,139,140,141,175,176,177,211,212,213,227,
26,31,32,33,66,67,68,69,70,103,104,105,139,140,141,175,176,177,227,
20,25,26,27,30,31,32,33,34,67,68,69,103,104,105,139,140,141,227,
14,19,20,21,24,25,26,27,28,31,32,33,67,68,69,103,104,105,227,
8,13,14,15,18,19,20,21,22,25,26,27,31,32,33,67,68,69,227,
255,// 7 СТРЕЛКА ДВИЖЕТСЯ ГОРИЗОНТАЛЬНО ПО ВНЕШНИМ СТОРОНАМ КУБА//
4,9,11,16,39,41,51,53,76,81,83,88,227,
111,116,118,123,146,148,158,160,183,188,190,195,227,
128,133,135,163,165,175,177,200,205,207,212,227,
19,24,26,31,54,56,66,68,91,96,98,103,227,
2,7,9,14,37,39,49,51,74,79,81,86,227,
111,116,118,123,146,148,158,160,183,188,190,195,227,
130,135,137,142,165,167,177,179,202,207,209,214,227,
81,86,88,93,116,118,128,130,153,158,160,165,227,
22,27,29,34,57,59,69,71,94,99,101,106,227,
49,54,56,61,84,86,96,98,121,126,128,133,227,
39,44,46,51,74,76,86,88,111,116,118,123,227,
55,60,62,67,90,92,102,104,127,132,134,139,227,
118,123,125,130,153,155,165,167,190,195,197,202,227,
255,// 8 СЛУЧАЙНОЕ ДВИЖЕНИЕ ШАРА//
0,1,2,3,4,5,227,
6,7,8,9,10,11,36,37,38,39,40,41,227,
12,13,14,15,16,17,42,43,44,45,46,47,72,73,74,75,76,77,227,
18,19,20,21,22,23,48,49,50,51,52,53,78,79,80,81,82,83,108,109,110,111,112,113,227,
24,25,26,27,28,29,54,55,56,57,58,59,84,85,86,87,88,89,114,115,116,117,118,119,144,145,146,147,148,149,227,
30,31,32,33,34,35,60,61,62,63,64,65,90,91,92,93,94,95,120,121,122,123,124,125,150,151,152,153,154,155,180,181,182,183,184,185,227,
66,67,68,69,70,71,96,97,98,99,100,101,126,127,128,129,130,131,156,157,158,159,160,161,186,187,188,189,190,191,227,
102,103,104,105,106,107,132,133,134,135,136,137,162,163,164,165,166,167,192,193,194,195,196,197,227,
138,139,140,141,142,143,168,169,170,171,172,173,198,199,200,201,202,203,227,
174,175,176,177,178,179,204,205,206,207,208,209,227,
210,211,212,213,214,215,227,
30,31,32,33,34,35,227,
24,25,26,27,28,29,67,68,69,70,71,227,
18,19,20,21,22,23,60,61,62,63,64,65,102,103,104,105,106,107,227,
12,13,14,15,16,17,54,55,56,57,58,59,96,97,98,99,100,101,138,139,140,141,142,143,227,
6,7,8,9,10,11,48,49,50,51,52,53,90,91,92,93,94,95,132,133,134,135,136,137,174,175,176,177,178,179,227,
0,1,2,3,4,5,42,43,44,45,46,47,84,85,86,87,88,89,126,127,128,129,130,131,168,169,170,171,172,173,210,211,212,213,214,215,227,
36,37,38,39,40,41,78,79,80,81,82,83,120,121,122,123,124,125,162,163,164,165,166,167,204,205,206,207,208,209,227,
72,73,74,75,76,77,114,115,116,117,118,119,156,157,158,159,160,161,198,199,200,201,202,203,227,
108,109,110,111,112,113,150,151,152,153,154,155,192,193,194,195,196,197,227,
144,145,146,147,148,149,186,187,188,189,190,191,227,
180,181,182,183,184,185,227,
255,// 9 ДВЕ ПЛОСКОСТИ ВЕРТИКАЛЬНЫЕ ПООЧЕРЕДИ ДВИГАЮТСЯ ПО ДИАГОНАЛИ//
300};
int []tabl_eff=new int[600];
////////////////////////////////////////////////////////////////////////
void setup()
{
size(500, 500, P3D);
//noStroke();
stroke(0,100,100);
frameRate(70);//число кадров в секунду
}
////////////////////////////////////////////////////////////////////////
void draw()
{delay(n);//скорость анимации регулирует
//////////////////////////////////////////////////
i=0;
while(fl_A==true){tabl_eff[i]=tabl_dano[j];if(tabl_dano[j]==255){fl_A=false;s=0;}i++;j++;if(tabl_dano[j]==300){j=0;}}//запись в массив текущего эффекта
if(fl_D==true){k++;}if(k>600){fl_A=true;k=0;}//число циклов draw на 1 эффект

/////////////////////////////////////////////////
background(N); lights();
translate(width/2, (height/2)-50);
/////////  навигация исполнения эффектов ////////
if(fl_C==true)
{
//if (mousePressed && (mouseButton == LEFT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
//if (mousePressed && (mouseButton == RIGHT)){rotateX(rotX + distY); rotateY(rotY + distX);fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
if (mousePressed && (mouseButton == LEFT)){X=rotX + distY; Y=rotY + distX;fl=1;}// если нажата кнопка мыши и она левая вращаем видимым кубом
if (mousePressed && (mouseButton == RIGHT)){X=rotX + distY; Y=rotY + distX;fl=0;}// если нажата кнопка мыши и она правая вращаем невидимым кубом
rotateX(X); rotateY(Y);
} else{avtonom();}
//if (mousePressed && (mouseButton == CENTER)){noLoop();delay(3000);loop();}// если нажата центральная кнопка мыши то стоп кадр
if (mousePressed && (mouseButton == CENTER)){fl_D=!fl_D;delay(200);}// если нажата центральная кнопка мыши то стоп кадр

if (keyPressed&&key == ' ') {fl_A=true;k=0;}//если нажат пробел переходим к следующему эффекту
if (keyPressed&&(key == 'ц'||key == 'Ц'||key == 'w'||key == 'W')) {color_smena();}//если нажата клавиша "W"(Ц) меняем цвет куба
if (keyPressed&&(key == 'v'||key == 'V'||key == 'м'||key == 'М')){n=n+50;if(n>150){n=50;}delay(100);}// если нажата клавиша "V"(М)меняем скорость исполнения эффекта
if (keyPressed&&(key == 'a'||key == 'A'||key == 'ф'||key == 'Ф')){fl_C=!fl_C;delay(100);}// если нажата клавиша "A"(Ф)меняем автономный и ручной режимы
if (keyPressed&&(key == 'r'||key == 'R'||key == 'к'||key == 'К')){raz=raz*2;if(raz>4){raz=1;}delay(100);}// если нажата клавиша "R"(К)меняем размер элемента куба
if (keyPressed&&(key == 'f'||key == 'F'||key == 'а'||key == 'А')){forma_++;if(forma_>2){forma_=0;}delay(100);}// если нажата клавиша "F"(А)меняем форму элемента куба
if (keyPressed&&(key == 'q'||key == 'Q'||key == 'й'||key == 'Й')){N=N+127;if(N>255){N=0;}delay(100);}// если нажата клавиша "Q"(Й)меняем цвет экрана (день-ночь)
/////////////////////////////////////////////////
/////// перебор кадров в эффекте ///////////////
/////////////////////////////////////////////////

for (i=s+1;i<tabl_eff.length;i++) 
{

if(tabl_eff[i]==255){s=0;ss=sss;break;} 
if(tabl_eff[i]==227){ss=i;if(s==0){sss=i;}break;}
}

////////////////////////////////////////////////
////// построение изображения куба в кадре //////////////
/////////////////////////////////////////////// 
for (x=-2;x<4;x++)
{
  for (y=-2;y<4;y++)
  {
   for (z=-2;z<4;z++)
  {
if(fl==1){translate(2*R*x,2*R*y,2*R*z);strokeWeight(1);noFill();forma();translate(-2*R*x,-2*R*y,-2*R*z);}// условие видимости всего куба
for (i=s;i<ss;i++) 
{
if((x+2)+(y+2)*6+(z+2)*36==tabl_eff[i]){translate(2*R*x,2*R*y,2*R*z);strokeWeight(0.1);fill(r, g, b);forma();translate(-2*R*x,-2*R*y,-2*R*z);}

}
  }
}
}
if(fl_D==true){s=ss;}
////////////////////////////////////////////////
if(fl==0){strokeWeight(R/5);translate(R,R,R);noFill();box(12*R);}//рамка - куб при невидимости всего куба
if(fl==1){strokeWeight(R/5);translate(R,8*R,R);noFill();box(13*R,2*R,13*R);}//рамка - основание куба при его видимости
/////////////////////////////////////////////////
}


/////////////////// функции положения курсора и вращения колеса ////////////////////////////////////////////
void mousePressed() { lastX = mouseX; lastY = mouseY; }
void mouseDragged() {  distX = radians(mouseX - lastX); distY = radians(lastY - mouseY); }
void mouseReleased() {  rotX += distY; rotY += distX;distX = distY = 0.0;  }
void mouseWheel(MouseEvent event){R=R+5*event.getCount();}//приближение-удаление куба с помощью колеса мыши
////////////////// функция автономного вращения куба //////////////////////////
void avtonom()
{
  if(fl_B==true){rotateY(2*PI*m/256);}else{rotateY(-2*PI*m/256);}
  if(millis()-T>n){T=millis();m++;if(m>255){m=0;fl_B=!fl_B;if(fl_D==true){color_smena();fl_A=true;k=0;}}}
}
///////////// функция смены цвета ///////////////
void color_smena()
{
  color_++;
if(color_>7){color_=0;}if(color_==0){r=0;g=255;b=0;}if(color_==1){r=255;g=0;b=0;}if(color_==2){r=0;g=127;b=255;}if(color_==3){r=0;g=255;b=255;}if(color_==4){r=255;g=255;b=255;}
if(color_==5){r=255;g=255;b=0;}if(color_==6){r=255;g=0;b=255;}if(color_==7){r=255;g=127;b=0;}
}
/////////// функция смены формы элемента куба ////////////
void forma()
{
  if(forma_==0){box(R/raz);}//форма пикселя куб
  if(forma_==1){//форма пикселя шару подобная
ellipse(0, 0,R/raz,R/raz);
rotateX(PI/2);ellipse(0, 0,R/raz,R/raz);rotateX(-PI/2);
rotateX(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateX(PI/4);
rotateX(PI/4);ellipse(0, 0,R/raz,R/raz);rotateX(-PI/4);
rotateY(PI/2);ellipse(0, 0,R/raz,R/raz);rotateY(-PI/2);
rotateY(PI/4);ellipse(0, 0,R/raz,R/raz);rotateY(-PI/4);
rotateY(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateY(PI/4);
rotateZ(PI/4);ellipse(0, 0,R/raz,R/raz);rotateZ(-PI/4);
rotateZ(-PI/4);ellipse(0, 0,R/raz,R/raz);rotateZ(PI/4);
rotateZ(PI/2);ellipse(0, 0,R/raz,R/raz);rotateZ(-PI/2);
}
if(forma_==2)//форма пикселя светодиоду подобная
{
rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);
rotateY(PI/2);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(-PI/2);
rotateY(PI/4);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(-PI/4);
rotateY(-PI/4);rect(-R/(2*raz),0,R/raz,R/raz ); ellipse(0, 0,R/raz,R/raz);rotateY(PI/4);
rotateX(PI/2);ellipse(0,0,R/raz,R/raz);translate(0,0,-R/raz);ellipse(0,0,R/raz,R/raz);translate(0,0,R/raz);rotateX(-PI/2);
}
}
//////////////////////////////////////////////////////////


Добавлено спустя 6 минут 44 секунды:
Кстати если музыкальный файл больше 3 Мб тоже не работает.
Вложения
навигация.jpg
pro.zip
(2.55 МиБ) Скачиваний: 0
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 17 июл 2020, 16:40

Сделал простой редактор эффектов.
Редактор даёт изображение куба в двух режимах (рис.6) и последовательно выводит в консоль номера пикселей каждого записанного-нарисованного кадра при нажатии кнопки колеса. Вся навигация в редакторе осуществляется одной мышью и носит интуитивный характер. Переключение режимов происходит при кратком нажатии правой кнопки. Один режим (правая часть рисунка) даёт обзор куба с нарисованным текущим кадром. Второй режим (левая часть рисунка) управляет курсором куба 4 и рисует пиксели. Первый режим совпадает с режимом исполнителя. При втором: движение мышью двигает курсор в выбранном слое 3; вращение колеса перебирает слои, двигая курсор по оси z; краткое нажатие левой кнопки рисует пиксель 2 или стирает его при повторном нажатии. Нарисованные пиксели 1 неактивных слоёв подсвечены контурными линиями. Таким образом, перебирая режимы и вращая куб можно непосредственно рисовать пространственные изображения кадров. Получается своего рода 3D управляющий интерфейс. После завершения создания эффекта данные копируются из консоли и вносятся в массив исполнителя.
Код: Выделить всёРазвернуть
//3D processing //
//ВИРТУАЛЬНЫЙ РЕДАКТОР ЭФФЕКТОВ СВЕТОДИОДНОГО КУБА 6*6*6//
float rotX = 0.0, rotY = 0.0;
int lastX, lastY;
float distX = 0.0, distY = 0.0;
float X,Y;
int cursorX=0,cursorY=0,cursorZ=0;

int x=0,y=0,z=0;//счётчики - координаты
int i;//счётчик

int R=25;//размер куба в окне
int k=6;//счётчик ограничитель слоёв
int kk=1;//счётчик ограничитель слоёв

boolean fl_A=true;//флаг состояний (управление режимами работы мышки )


int[]tabl_cube = new int[216];
////////////////////////////////////////////////////////////////////////
void setup()
{
size(600, 600, P3D);
//noStroke();
stroke(255,50);
frameRate(10);//число кадров в секунду
for (i=0;i<216;i++){tabl_cube[i]=0;} 

}
////////////////////////////////////////////////////////////////////////
void draw()
{
background(0); lights();
translate(width/2.5, (height/2.5));
/////////  навигация исполнения ////////
if (mousePressed && (mouseButton == RIGHT)){fl_A=!fl_A;delay(100);}if(fl_A==false){kk=k;}else{kk=1;k=6;}//переключение режима курсор-обзор
if (mousePressed && (mouseButton == LEFT)){if(fl_A==true){X=rotX + distY; Y=rotY + distX;}// если нажата кнопка мыши и она левая вращаем видимым кубом или рисуем-стираем курсором
if(fl_A==false){if(tabl_cube[(cursorX+2)+(cursorY+2)*6+(cursorZ+2)*36]==0){tabl_cube[(cursorX+2)+(cursorY+2)*6+(cursorZ+2)*36]=1;}
else{tabl_cube[(cursorX+2)+(cursorY+2)*6+(cursorZ+2)*36]=0;}delay(100);}
}
rotateX(X); rotateY(Y);
if(fl_A==false){cursorX=((mouseX-200)/50)-2;cursorY=((mouseY-200)/50)-2;//получаем координаты курсора в слоях куба
if(cursorX>3){cursorX=3;}if(cursorY>3){cursorY=3;}cursorZ=k-3;if(cursorX<-2){cursorX=-2;}if(cursorY<-2){cursorY=-2;}cursorZ=k-3;}
if (mousePressed && (mouseButton == CENTER)) { for (i=0;i<216;i++){//если нажато колесо мыши переходим к следующему кадру эффекта и печатаем данные в консоль-монитор
if(tabl_cube[i]==1){print(i);print(",");}}print("227,");println();for (i=0;i<216;i++){tabl_cube[i]=0;}delay(200);}

//print(mouseX);print("  ");println(mouseY);
///////////////////////////////////////////////
////// построение изображения куба в кадре //////////////
///////////////////////////////////////////////

for (x=-2;x<4;x++)
{
  for (y=-2;y<4;y++)
  {
   for (z=kk-3;z<k-2;z++)
  {
translate(2*R*x,2*R*y,2*R*z);strokeWeight(1);noFill();box(R/2);translate(-2*R*x,-2*R*y,-2*R*z);// условие видимости всего куба
for (i=0;i<216;i++) 
{
if(tabl_cube[i]==1&&i==(x+2)+(y+2)*6+(z+2)*36){translate(2*R*x,2*R*y,2*R*z);fill(255,255,0);box(R/2);translate(-2*R*x,-2*R*y,-2*R*z);}//условие рисования по данным массива
}
  }
////////////////////////
for (z=-2;z<4;z++)
  {
   for (i=0;i<216;i++) 
    {
   if(tabl_cube[i]==1&&i==(x+2)+(y+2)*6+(z+2)*36&&fl_A==false){translate(2*R*x,2*R*y,2*R*z);stroke(255,255,0,127); noFill();box(R/2);stroke(255,50); translate(-2*R*x,-2*R*y,-2*R*z);}
  }
  }
////////////////////////
}
}
if(fl_A==false){translate(2*R*cursorX,2*R*cursorY,2*R*cursorZ);fill(0,255,255,150);sphereDetail(10);sphere(R/2.5);translate(-2*R*cursorX,-2*R*cursorY,-2*R*cursorZ);}//ставим курсор по координатам
strokeWeight(R/5);translate(R,8*R,R);noFill();box(13*R,2*R,13*R);translate(-R,-8*R,-R);//рамка - основание куба при его видимости
for (i=-2;i<4;i++){strokeWeight(R/5);translate(-5*R,6*R,2*i*R);noFill();box(R,R/2,0);translate(5*R,-6*R,-2*i*R);}//метки слоёв куба и ориентир положения
/////////////////////////////////////////////////
}

/////////////////// функции положения курсора и вращения колеса ////////////////////////////////////////////
void mousePressed() {if(fl_A==true) {lastX = mouseX; lastY = mouseY;} }//когда нажата
void mouseDragged() {if(fl_A==true)  {distX = radians(mouseX - lastX); distY = radians(lastY - mouseY);} }//когда движется
void mouseReleased() {if(fl_A==true)  {rotX += distY; rotY += distX;distX = distY = 0.0; } }//когда отпущена
void mouseWheel(MouseEvent event){if(fl_A==true){R=R+5*event.getCount();}else{k=k+event.getCount();if(k<1){k=1;}if(k>6){k=6;}}}//приближение-удаление куба с помощью колеса мыши
Вложения
рис.6.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Myp » 17 июл 2020, 17:44

Ну всё теперь можно и в продажу выпускать, набор для сборки + программа редактор эффектов.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Вопросы новичка.

Сообщение dimamichev » 17 июл 2020, 20:03

:) Нее,нельзя. Нет разработанной,сделанной и проверенной единой платы конструкции. А это этап я точно не осилю.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 18 июл 2020, 16:22

Всё таки без виртуальных кнопок, с одной клавиатурой, неудобно. Их назначение с ростом числа быстро забывается. Добавил кнопки для покадровой съёмки чтобы гифки делать...
...квадропод типа.
Вложения
kadr_1.png
квадропод.gif
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 18 июл 2020, 17:22

Режим отображение на физическом кубе в реальном времени сделал? Ну, за исключением формы светодиодов))
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7