Inspiro 1

PhDr. Mgr. Jeronym Klimes, Ph.D. 2015-01-11

http://klimes.mysteria.cz

Jistě si pamatujete hru Inspiro - spousta zubatých koleček, jezdíte tužkou jako blázen a pozorujete, jaký zvláštní obrazek vám vzniká pod rukama.

Ani nevím, jak mě napadlo to naprogramovat do počítače. Byl to rozhodně špatný nápad, protože Inspiro byla hlavně hra na procvičování jemné motoriky, což počítač nikdy nenahradi. Každopádně zde máte php stroj na vyrábění těchto obrázců v kuriozních konstelacích. Hodnoty, které nenastavíte, určí počítač náhodně. Vyzkoušejte klávesu F5 - reload.

Časem jsem naprogramoval ještě jiné varianty.
Pokud byste měli zájem o zdrojové soubory, není problém zaslat. Je to pár řádek v polárních souřadnicích.



x - obrázku [pix]:

y - obrázku [pix]:

Pozadí R G B [0-255] 3×255=bílá; 3×0=černá

Popředí R G B

Elipsa [%] x    y 100=kolo

Poloměr velkého kola (r1):

Poloměr pastorku (r2):

Vzdálenost dírky od okraje pastorku (r3):

Orientace otáčení: vnitřní vnější obvod velkého kolečka

Krok (úhel): Může být menší než jedna, napr. 0.2. Spočítá první bod, pootočí, spočítá druhý bod a spojí čárou...

Počet kroků:

Výstup do souboru background1.htm


<?php
Header
("Content-type: image/png");
// function test_promenne(&$promenna, $typ, $default, $horni, $dolni)  {
//     switch $typ {
//         case "int": 
//             (is_integer($promenna) && $promenna <= $horni && $promenna >= $dolni)? return $promenna : return $default;
//             break;
//         }
//     }
// 
// $promenna=34
// echo "test vratil: " . test($promenna, "int", 55, 50, 100);
// exit();

if ($pozadir=="" || $pozadir>255  || $pozadir<0  || !is_numeric($pozadir))  $pozadir=255;//128  0 cerna 255 bila
if ($pozadig=="" || $pozadig>255  || $pozadig<0  || !is_numeric($pozadig))  $pozadig=255;//0
if ($pozadib=="" || $pozadib>255  || $pozadib<0  || !is_numeric($pozadib))  $pozadib=255;//0
if ($popredir==""|| $popredir>255 || $popredir<|| !is_numeric($popredir)) $popredir=0;//150
if ($popredig==""|| $popredig>255 || $popredig<|| !is_numeric($popredig)) $popredig=0;//60
if ($popredib==""|| $popredib>255 || $popredib<|| !is_numeric($popredib)) $popredib=0;//0
if ( $picWidth=="" ||  $picWidth<10||  $picWidth>1500 || !is_numeric$picWidth)) $picWidth=400;//round(400*$pomerx); 
if ($picHeight=="" || $picHeight<10|| $picHeight>1500 || !is_numeric($picHeight))$picHeight=400;//round(400*$pomery); 
    
$xbase $picWidth  2
    
$ybase $picHeight 2;  
  
$mala=min($xbase,$ybase);

if (
$pomer<|| $pomer>100 || !is_numeric($pomer) ) $pomerx=round(rand(20,100))/100; else $pomerx=$pomer/100;
if (
$pomer<|| $pomer>100 || !is_numeric($pomer) ) $pomery=round(rand(20,100))/100; else $pomery=$pomer/100;
if (
$elipsa==""$elipsa=rand(0,1);
if (
$elipsa==1$pomery=1; else $pomerx=1;

//$pomerx=1;
//$pomery=1;

    
$pic=ImageCreate($picWidth+1,$picHeight+1); 
    
$cRed=ImageColorAllocate($pic,$pozadir,$pozadig,$pozadib); //pozadi
    
$cYellow=ImageColorAllocate($pic,$popredir,$popredig,$popredib); //popredi
//    $cBackground=ImageColorAllocate($pic,0,0,0); 

if (($r1=="")&&($r2=="")&&($r3=="")) $volnaruka=rand(1,2);
if (
$r1==""$r1=rand(1$mala); //vnější obvod 
if ($r2==""$r2=rand(1$mala); // průměr pastorku
if ($r3==""$r3=rand(1$mala); // průměr dikry v pastorku


/*
if ($r1=="") $r1=$xbase * .90 + rand(0,$xbase/10); //vnější obvod 
if ($r2=="") $r2=$xbase * 0.3  + rand(0,$xbase * 0.6); // průměr pastorku
if ($r3=="") $r3=$xbase * 0  + rand(0, $xbase/4); // průměr dikry v pastorku
*/

if ($orientace == ""$orientace=2*rand(0,1)-1
// směr odvalu náhodně 1 - vnejsi obvod či -1 - vnitrni obvod
$pomerr=$mala/(abs($r1+$orientace*$r2)+$r3);
if (
$volnaruka==1$pomerr=1//hausnumera
  
$r1 $r1 $pomerr;
  
$r2 $r2 $pomerr;//
  
$r3 $r3 $pomerr;
if (
$krok=="")      $krok=rand(1,150)/10;
if (
$kroku=="")     $kroku=rand(5,300)*$krok;
  
$rrabs($r1 $orientace*$r2);
       
$j  0;
$a1 $j/$krok;//úhel alfa
$a2 $orientace*$a1*$r1/$r2;//úhel beta

    
$nx round($xbase + (cos($a1)*($rr) + cos($a2)*($r3))*$pomerx);
    
$ny round($ybase + (sin($a1)*($rr) + sin($a2)*($r3))*$pomery);
    
$px $nx;
    
$py $ny;

do    {
    
$j++;
    
$a1$j/$krok;
    
$a2$orientace*$a1*$r1/$r2;
    
$sx=$nx;
    
$sy=$ny;
    
$nx=round($xbase + (cos($a1)*($rr) + cos($a2)*($r3))*$pomerx);
    
$ny=round($ybase + (sin($a1)*($rr) + sin($a2)*($r3))*$pomery);
    
imageline($pic$sx$sy$nx$ny1); 
//    imagesetpixel ($pic, $nx,$ny , 1);
    
} while ((($nx!=$px) || ($ny!=$py)) && ($j<$kroku));

if (
$vystup==1):
  
$f fopen("background1.htm""w");
  
$promenne="picWidth=".$picWidth."&picHeight=".$picHeight."&pozadir=".$pozadir."&pozadig=".$pozadig."&pozadib=".$pozadib."&popredir=".$popredir."&popredig=".$popredig."&popredib=".$popredib."&pomer=".$pomer."&elipsa=".$elipsa."&r1=".$r1."&r2=".$r2."&r3=".$r3."&orientace=".$orientace."&krok=".$krok."&kroku=".$kroku;
  
fputs($f"<html><body>");
  
fputs($f"<a href=inspir1.php?".$promenne.">hodnoty vlozit do formulare inspiro.php</a><br>");
  
fputs($f"<a href=background1.php?".$promenne.">ulozene hodnoty z background1.php</a><br>");
  
fputs($f$promenne);
  
fputs($f"<br><a href=inspiro1.php?picWidth=$picWidth&picHeight=$picHeight&pozadir=$pozadir&pozadig=$pozadig&pozadib=$pozadib&popredir=$popredir&popredig=$popredig&popredib=$popredib&pomer=$pomer&elipsa=$elipsa&r1=$r1&r2=$r2&r3=$r3&orientace=$orientace&krok=$krok&kroku=$kroku&vystup=$vystup target=_blank>Líbí se Vám obrázek? Uložte si tento odkaz.</a>");
  
fputs($f"</body></html>");
  
fclose($f);
  endif;


    
Imagepng($pic); 
    
ImageDestroy($pic); 

?>