|
Форум Форум
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 6: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> |
|
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 6:05 pm Заголовок сообщения: |
|
|
Че-т он все NaN-ом забивает. |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 6:15 pm Заголовок сообщения: |
|
|
Код: | Math.pow(points[1].x-points[0].x) |
Забыл степень указать
Код: | Math.pow((points[1].x-points[0].x),2) |
|
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 6:54 pm Заголовок сообщения: |
|
|
Че-т я с тригонометрией начудил |
|
Вернуться к началу |
|
|
Slav Мастер-Флудер I
Репутация: +31
Зарегистрирован: 06.06.2006 Сообщения: 18196 Откуда: КиевЪ Награды: Нет
|
Добавлено: Чт Фев 25, 2016 7:06 pm Заголовок сообщения: |
|
|
Ну ты гад конечно))) Только намылился программирование 1С осилить, а тут засада такая) |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 8: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() и пездонуть туда аяксину
Последний раз редактировалось: Rasty (Чт Фев 25, 2016 9:17 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Чт Фев 25, 2016 9:02 pm Заголовок сообщения: |
|
|
Admin писал(а): | с разным коэффициентом получаются совершенно разные результаты |
Два из четырех меняю в небольших пределах (+0.05):
|
|
Вернуться к началу |
|
|
Slav Мастер-Флудер I
Репутация: +31
Зарегистрирован: 06.06.2006 Сообщения: 18196 Откуда: КиевЪ Награды: Нет
|
Добавлено: Чт Фев 25, 2016 9:48 pm Заголовок сообщения: |
|
|
я такое на X Spectrium малевал, методом научного тыка))) |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 4:28 pm Заголовок сообщения: |
|
|
Терь надо серверную часть сделать. |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 4: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];
}
}
} |
|
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 4: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];
}
}
} |
Временное решение. Количество генов буду делать динамическим. |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 6: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;
}
} |
|
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 6: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) другая половина мутаций - добавление новой пары генов (или же наоборот - стирание пары генов) |
|
Вернуться к началу |
|
|
Rasty Crackpot
Репутация: +89/–10
Зарегистрирован: 23.05.2006 Сообщения: 24421
Награды: Нет
|
Добавлено: Пт Фев 26, 2016 7:55 pm Заголовок сообщения: |
|
|
Чего-то де-то наперепутал. Количество генов только увеличивается. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group Русская поддержка phpBB
|