Список форумов Форум Форум
Форум
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   medals.phpНаграды   РегистрацияРегистрация 
 ПрофильПрофиль   СудокуСудоку   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Буду тута бяку программировать.
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии
Предыдущая тема :: Следующая тема  
Автор Сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 8:05 pm    Заголовок сообщения: Буду тута бяку программировать. Ответить с цитатой

Код:
      <script>
         function recurs(context, points, arr, position, n){
            if (n==0){
               context.beginPath();
               context.moveTo(points[0].x,points[0].y);
               context.lineTo(points[1].x,points[1].y);            
               context.stroke();
               return position;
            }else{
               if (!position[n]) position[n]=0;
               var d=Math.sqrt(Math.pow(points[1].x-points[0].x)+Math.pow(points[1].y-points[0].y));
               var xx=points[0].x+d*Math.cos(arr[position[n]]);
               var yy=points[0].y+d*Math.sin(arr[position[n]]);
               position[n]++;
               if(position[n]==arr.length) position[n]=0;
               points=[
                  {x:points[0].x, y:points[0].y},
                  {x:xx, y:yy}
               ];
               position=recurs(context, points, arr, position, n-1);
               points=[
                  {x:xx, y:yy},
                  {x:points[1].x, y:points[1].y}
               ];
               position=recurs(context, points, arr, position, n-1);
               return position;
            }
         };
         window.onload=function(){
            var canvas=document.getElementById('myCanvas');
            var context=canvas.getContext('2d');
            canvas.width=500;
            canvas.height=600;
            context.fillStyle = "rgb(256,256,256)";
            context.fillRect (0, 0, canvas.width, canvas.height);
            //context.beginPath();
            //context.moveTo(canvas.width,canvas.height);
            //context.lineTo(0,0);         
            //context.stroke();
            var n=5;
            var arr=[0,1,8,2,7];
            var position=new Array(n);
            var points=[
               {x:250, y:200},
               {x:250, y:400}
            ];
            recurs(context, points, arr, position, n);
         };
      </script>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 8:05 pm    Заголовок сообщения: Ответить с цитатой

Че-т он все NaN-ом забивает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 8:15 pm    Заголовок сообщения: Ответить с цитатой

Код:
Math.pow(points[1].x-points[0].x)

Забыл степень указать
Код:
Math.pow((points[1].x-points[0].x),2)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 8:54 pm    Заголовок сообщения: Ответить с цитатой

Че-т я с тригонометрией начудил
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Slav
Мастер-Флудер I
Мастер-Флудер I


Репутация: +11    

Зарегистрирован: 06.06.2006
Сообщения: 7542
Откуда: КиевЪ
Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 9:06 pm    Заголовок сообщения: Ответить с цитатой

Ну ты гад конечно))) Только намылился программирование 1С осилить, а тут засада такая)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 10:37 pm    Заголовок сообщения: Ответить с цитатой

Я эту бяку доделать с 17-ти лет мылюсь.

Убрал к хуям собачьим объект points[]. Думал повыебываться, мол у меня тут не x0, y1, а points.x, points.y... Какая-то хуета полезла

Нуивовпень те поинтсы. Переделал по старинке, с x0, x1...

Код:
function recurs(context, arr, position, n, x0, y0, x1, y1){
   if (n==0){
      context.lineTo(x1,y1);
      return position;
   }else{
      if (!position[n]) position[n]=0;
      var xx=0.5*((x1-x0)*Math.cos(arr[position[n]])-(y1-y0)*Math.sin(arr[position[n]]))+x0;
      var yy=0.5*((x1-x0)*Math.sin(arr[position[n]])+(y1-y0)*Math.cos(arr[position[n]]))+y0;

      position[n]++;
      if(position[n]==arr.length) position[n]=0;
      
      position=recurs(context, arr, position, n-1, x0, y0, xx, yy);
      position=recurs(context, arr, position, n-1, xx, yy, x1, y1);
      
      return position;
   }
};
window.onload=function(){
   var canvas=document.getElementById('myCanvas');
   var context=canvas.getContext('2d');
   canvas.width=500;
   canvas.height=600;
   context.fillStyle = "rgb(256,256,256)";
   context.fillRect (0, 0, canvas.width, canvas.height);
   var n=18;
   var arr=[2.0944, 0.523599];
   var position=new Array(n);
   var x0=250, y0=250, x1=250, y1=450;
   
   context.beginPath();
   context.moveTo(x0,y0);
   recurs(context, arr, position, n, x0, y0, x1, y1);
   context.stroke();
};


Порадовал JavaScript. У меня где-то старый exe-шник остался на Visual Basic (2005-го года экзешник). Рисует exe-шник ту же бяку (только без рекурсий). Так вот он уже на 16 итерациях виснет. А тут n=18 и сходу хуяк и нарисовало:



Вот в этом месте очень не аккуратно сделал:
Код:
var xx=0.5*((x1-x0)*Math.cos(arr[position[n]])-(y1-y0)*Math.sin(arr[position[n]]))+x0;
var yy=0.5*((x1-x0)*Math.sin(arr[position[n]])+(y1-y0)*Math.cos(arr[position[n]]))+y0;


0.5 от балды вписал. Можно было бы туда косинус какой-нить вписать, но с разным коэффициентом получаются совершенно разные результаты:





Будем мы эти коэффициенты, как и углы, сервером генерировать размышляет о_О

Терь надо придумать, как избавиться от этой window.onload=function() и пездонуть туда аяксину


Последний раз редактировалось: Admin (Чт Фев 25, 2016 11:17 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 11:02 pm    Заголовок сообщения: Ответить с цитатой

Admin писал(а):
с разным коэффициентом получаются совершенно разные результаты


Два из четырех меняю в небольших пределах (+0.05):

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Slav
Мастер-Флудер I
Мастер-Флудер I


Репутация: +11    

Зарегистрирован: 06.06.2006
Сообщения: 7542
Откуда: КиевЪ
Награды: Нет

СообщениеДобавлено: Чт Фев 25, 2016 11:48 pm    Заголовок сообщения: Ответить с цитатой

я такое на X Spectrium малевал, методом научного тыка)))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 6:28 pm    Заголовок сообщения: Ответить с цитатой

Терь надо серверную часть сделать. размышляет о_О
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 6:36 pm    Заголовок сообщения: Ответить с цитатой

Чтобы не создавать велосипедов, можно взять отсюда: http://rasty.kiev.ua/viewtopic.php?t=19340 и немножко допилить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 6:40 pm    Заголовок сообщения: Ответить с цитатой

Основная логическая часть программы сделана очень не аккуратно.
Код:
   for($i=0; $i<50; $i++){
      $i1=$i;
      $i2=$i+50;
      $predok1=rand(100, 199);
      $predok2=rand(100, 199);
      if($predok2==$predok1){if($predok2<199){$predok2++;}else{$predok2--;}}
      foreach($population[$predok1] as $key=>$value){
         if($key!="fitness"){
            $population[$i1][$key]=$value;
            $population[$i2][$key]=$population[$predok2][$key];
         }
      }
   }

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 6:49 pm    Заголовок сообщения: Ответить с цитатой

Хуле

Код:
   $hsize=(int)$populationSize/2;
   $hhsize=(int)$populationSize/4;
   
   $bestpopulation=array_slice($population, $hsize);
   shuffle($bestpopulation);
   
   for($i=0; $i<$hhsize; $i++){
      $i1=$i;
      $i2=$i+$hhsize;

      $predok1=$hsize-1-$i;
      $predok2=$hsize-1-$i*2;
      
      foreach($$bestpopulation[$predok1] as $key=>$value){
         if($key!="fitness"){
            $population[$i1][$key]=$value;
            $population[$i2][$key]=$bestpopulation[$predok2][$key];
         }
      }
   }


Временное решение. Количество генов буду делать динамическим.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 8:08 pm    Заголовок сообщения: Ответить с цитатой

Как-то так

Код:
   $population=population($populationSize);
   $by = 'fitness';
   usort($population, function($first, $second) use($by){
   if ($first[$by]>$second[$by]) {return 1;}
   elseif ($first[$by]<$second[$by]) {return -1;}
   return 0;
   });
   $hsize=(int)$populationSize/2;
   $hhsize=(int)$populationSize/4;
   $bestpopulation=array_slice($population, $hsize);
   shuffle($bestpopulation);
   for($i=0; $i<$hhsize; $i++){
      $i1=$i;
      $i2=$i+$hhsize;
      $j=0;
      foreach($bestpopulation[$i1] as $key=>$value){
         if($key!="fitness"){
            if(rand(0,1)==1){
               $population[$i1][$j]=$value;
               if(isset($bestpopulation[$i2][$j])) $population[$i2][$j]=$bestpopulation[$i2][$j];
            }else{
               $population[$i2][$j]=$value;
               if(isset($bestpopulation[$i2][$j])) $population[$i1][$j]=$bestpopulation[$i2][$j];
            }
         }
         $j++;
      }
   }

   for($i=0;$i<$populationSize;$i++){
      unset($population[$i]['fitness']);
      $population[$i]['fitness']=0;
      $mutate=rand(0, 9);
      if($mutate==0){
         $key=rand(0, count($population[$i])-1);
         $population[$i][$key][0]=rand(-32766, 1)*M_PI/32767;
         $population[$i][$key][1]=rand(-32767, 32767)/32767;
      }
   }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 8:50 pm    Заголовок сообщения: Ответить с цитатой

Последний for переписал.

Код:
   for($i=0;$i<$populationSize;$i++){
      unset($population[$i]['fitness']);
      $mutate=rand(0, 19);
      if($mutate==0){
         $key=rand(0, count($population[$i])-1);
         $population[$i][$key][0]=rand(-32766, 1)*M_PI/32767;
         $population[$i][$key][1]=rand(-32767, 32767)/32767;
      }
      if($mutate==1){
         $add=rand(0,1);
         if($add==0){
            $ploidy[0]=rand(-32766, 1)*M_PI/32767;
            $ploidy[1]=rand(-32767, 32767)/32767;
            array_push($population[$i], $ploidy);
         }else{
            if(count($population[$i])>2) array_pop($population[$i]);
         }
      }
      
      $population[$i]['fitness']=0;
   }


Вот тут самая вкусняфка :3
В свежесозданной популяции каждая особь может мутировать с 5% вероятностью
Код:
$mutate=rand(0, 19);

Причем мутации могут быть двух видов:
1) половина возможных мутаций - изменение случайно выбранной пары генов (угол-коэффициент) на случайное значение.
2) другая половина мутаций - добавление новой пары генов (или же наоборот - стирание пары генов)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Admin
Crackpot


Репутация: +86/–9    

Зарегистрирован: 23.05.2006
Сообщения: 21200

Награды: Нет

СообщениеДобавлено: Пт Фев 26, 2016 9:55 pm    Заголовок сообщения: Ответить с цитатой

Чего-то де-то наперепутал. Количество генов только увеличивается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии Часовой пояс: GMT + 2
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB