Advertisement
apexsquirt

[PHP-CLI-FR] Traceur de courbes

Sep 18th, 2018
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.35 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.     //<zone de modification>
  12.  
  13.         function f($x) {
  14.             $x = $x**2; return (1/4+$x-1/4*(2*$x+1)*cos(pi()*$x))/(1/2*$x+pi()**2/4*(1/exp($x)+$x-1));
  15.             //j'ai mis ça pck c'est joli mais fais-toi plaisir et mets n'importe quel truc qui donne un chiffre par rapport à $x au lieu d'la ligne précédente
  16.         }
  17.        
  18.         $round = 3; //nombres de chiffres après la virgule
  19.         $minX = 4650; $maxX = INF; //les valeurs minimales et maximales de l'abscisse
  20.         $minY = -1/3; $maxY = 1; //les valeurs minimales et maximales de l'ordonnée donnant des █ et pas des ▒
  21.         $zoom = 40; $step = 1/21; //nombres d'espaces derrière (ou devant) l'abscisse ($zoom) et nombre d'incrémentation/pas ($step)
  22.         $noOuterBounds = true; //détermine si on néglige ou non de montrer les zones où la valeur ordonnée est supérieure à $maxY ou inférieur à $minY
  23.         $secondsToStop = 0.05; //donne un temps de latence de $secondsToStop par affichage de point
  24.  
  25.     //</zone de modification>
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. function plot($x,$y,$n,$min,$max,$r) {
  36.     $N = floor(($y-$min)/($max-$min)*(2*$n+1));
  37.     $bih = "";
  38.     for ($i = 1; $i <= $n; $i++) {
  39.         $bih .= " ";
  40.     }
  41.     $bih .= "O";
  42.     for ($i = 1; $i <= $n; $i++) {
  43.         $bih .= " ";
  44.     }
  45.     $str = "";
  46.     for ($i = 0; $i < strlen($bih); $i++) {
  47.         if ($N <= $n && $N > 0) {
  48.             if ($i == $N - 1) {
  49.                 $str .= "█";
  50.             } else {
  51.                 $str .= $bih[$i];
  52.             }
  53.         } elseif ($N > $n && $N <= 2*$n+1) {
  54.             if ($i == $N) {
  55.                 $str .= "█";
  56.             } else {
  57.                 $str .= $bih[$i];
  58.             }
  59.         } elseif ($N <= 0) {
  60.             if ($i == 0) {
  61.                 $str .= "▒";
  62.             } else {
  63.                 $str .= $bih[$i];
  64.             }
  65.         } elseif ($N > 2*$n+1) {
  66.             if ($i == strlen($bih)-1) {
  67.                 $str .= "▒";
  68.             } else {
  69.                 $str .= $bih[$i];
  70.             }
  71.         }
  72.     }
  73.     return $str . " x≈".round($x,$r).",f(x)≈".round($y,$r);
  74. }
  75. $count = 0;
  76. print "Attention : prenez soin à exagérer un peu les valeurs par rapport à ce que vous cherchez à dessiner.\n\n";
  77. $date = microtime(true);
  78. for ($n = $minX; $n <= $maxX; $n += $step) {
  79.     $newdate = microtime(true);
  80.     $count++; $dt += ($newdate-$date)*100;
  81.     if ($noOuterBounds == true && strpos(plot($n,f($n),$zoom,$minY,$maxY,$round),"█")) { print plot($n,f($n),$zoom,$minY,$maxY,$round)."\n"; }
  82.     elseif ($noOuterBounds == false) { print " ".plot($n,f($n),$zoom,$minY,$maxY,$round)."\n"; }
  83.     $date = $newdate;
  84.     usleep($secondsToStop*1000000);
  85. }
  86. echo `pause>nul`;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement