Замена lcg_value() на rand

109
26 июля 2019, 14:40

Проверив код программы увидел, что lcg_value() генерирует такие точки, что укладывает их по сути все рядом. Значение сильно не меняется. Как заменить здесь на rand()?

<?php
if(isset($_POST["Ax"])){
            $D = new Point($_POST["Ax"], $_POST["Ay"]);
            $E = new Point($_POST["Bx"], $_POST["By"]);
            $F = new Point($D->x - $E->x, $D->y);
            $W = new Point($D->x - $E->x, $E->y);
            $C = new Point($D->x, $E->y);
            $O = new Point($E->x, $D->y);
            $R = ($D->x - $E->x);
                $a = $W->y - $F->y;
                $b = $C->x - $W->x;
                $square = $a * $b; 
                $WF = sqrt(pow(($W->x - $F->x), 2)+pow(($W->y - $F->y), 2));
                $FD = sqrt(pow(($F->x - $D->x), 2)+pow(($F->y - $D->y), 2));
                $EO = sqrt(pow(($E->x - $O->x), 2)+pow(($E->y - $O->y), 2));
                $FO = sqrt(pow(($F->x - $O->x), 2)+pow(($F->y - $O->y), 2));
                //$rctngl = $WF * $FD; //rectangle
                $trngl = ($EO * $FO) / 2; //triangle
                $crcl = (3.14 * pow($EO, 2)) /4; //circle
                $squareF =  Square($r, $EO, $FO); // площадь фигуры
                echo 'Dx='.$_POST["Ax"].' Dy='.$_POST["Ay"].' Ex='.$_POST["Bx"].' Ey='.$_POST["By"].' <hr/> ';
                echo 'Общая площадь : '.$squareF.'  <br/>'; 
                $k = 0;
                $fori = 10;
             echo '<div class="CSSTableGenerator" >
                <table >
                    <tr>
                        <td>
                            Кол-во испытаний
                        </td>
                        <td >
                           Кол-во попавших точек
                        </td>
                        <td>
                            Площадь фигуры
                        </td>
                        <td>
                            Погрешность, %
                        </td>
                        <td>
                            Время, мс
                        </td>
                    </tr>
               ';
                while ($k < 5)
               {
         $vremiya_starta = microtime(true);
                    $inF = 0; $outF = 0;
                   for ($i = 0; $i < $fori; $i++)
                    {
                        $P = new Point($x, $y);
                        $x = random_float($F->x,$C->x);
                        $y = random_float($F->y,$C->y);
                        if (IsInFigure($x, $y, $D,$E,$F,$O,$P))
                        {
                            $inF++;
                        }
                        else
                        {
                            $outF++;
                        }
                    }
                   $s = $square * ($inF / $fori);
                    $vremya_okonchaniya = microtime(true);
                    $vremya = $vremya_okonchaniya - $vremiya_starta;
                    $vremya = round($vremya*1000);
                   echo '<tr>
                        <td>'.
                            $fori.'
                        </td>
                        <td >'.
                          $inF.'
                        </td>
                        <td>'.
                            $s.'
                        </td>
                        <td>
                        '.round((Different($r, $EO, $FO, $inF, $fori, $square, $nowS)),4).'
                        </td>
            <td>'.
                           ($vremya).'
                        </td>
                    </tr>';
                    $k++;
                    $fori *= 10;
                }
                echo ' </table>
            </div>';
}
class Point{
    public $X = 0;
    public $Y = 0;
    public function __construct($x, $y){
    $this->x = $x;
    $this->y = $y;
    }
    public function PointView ($x, $y) {
    $this->x = $x;
    $this->y = $y;
    }   
}
function random_float ($min,$max) {
   return ($min+lcg_value()*(abs($max-$min)));
}
    function IsInFigure($x, $y, $D,$E,$F,$O,$P)
        { 
            if ($P->x < $E->x)
            {
                if (IsInTriangle($x, $y, $E, $F, $O, $P))
                return true;
            else
                if (IsInCircle($x, $y, $E, $O, $P))
                return true;
            }
            return false;
        }
    function IsInCircle($x, $y, $E, $O, $P)
        {  
            $x = ($E->X - $P->X);
            $y = ($O->Y - $P->Y);
            $cr = new Point($x, $y);
            $R = $E->Y - $O->Y;
            (double)$qx = pow($cr->x, 2); (double)$qy = pow($cr->y, 2);
            (double)$vect_length = sqrt($qx + $qy);
            if ($vect_length <= $R)
                return true;
            return false;   
        }
        function IsInTriangle($X, $Y, $E, $F, $O, $P)
        {
           (double)$Eq = ($F->X - $P->X) * ($E->Y - $F->Y) - ($E->X - $F->X) * ($F->Y - $P->Y);
           (double)$Fq = ($E->X - $P->X) * ($E->Y - $E->Y) - ($F->X - $E->X) * ($E->Y - $P->Y);
           (double)$Oq = ($F->X - $P->X) * ($F->Y - $E->Y) - ($F->X - $F->X) * ($F->Y - $P->Y);
           return (($Eq >= 0 && $Fq >= 0 && $Oq >= 0) || ($Eq <= 0 && $Fq <= 0 && $Oq <= 0));
        }
        function Square($r, $EO, $FO)
        {
            $crcl = (3.14 * pow($EO, 2)) /4;
            $trngl = ($EO * $FO) / 2;
            //$Rt = $WF * $FD;
            return ($trngl + $crcl);
        }
function Different($r, $EO, $FO, $inF, $fori, $square, $nowS)
{
            $crcl = (3.14 * pow($EO, 2)) /4;
            $trngl = ($EO * $FO) / 2;
            //$Rt = $WF * $FD;
            $nowS = $square * ($inF / $fori);
return abs((($crcl + $trngl) - $nowS)/($crcl + $trngl));
}
?>
READ ALSO
Почему file_put_contents записывает не все содержимое?

Почему file_put_contents записывает не все содержимое?

Подскажите, почему file_put_contents в моем коде ниже, записывает не все содержимое, как исправить?

153
Как менять стиль в зависимости от выводимой даты?

Как менять стиль в зависимости от выводимой даты?

Только начал изучать php вопрос может прозвучать не совсем корректно для более опытных

106
Несколько изображений в одном товаре в каталоге

Несколько изображений в одном товаре в каталоге

Как реализовать галерею изображений одного товара в каталоге? Нужна реализация на php mysqlНе могу найти решение подобного вопроса

148
Есть база .gdb на сервере, как я могу ее подключить к веб сайта?

Есть база .gdb на сервере, как я могу ее подключить к веб сайта?

Есть базаgdb на сервере, как я могу ее подключить к веб сайту php? Также есть внешний статический ip

140