Рисование функций, начиная с определенной точки

#php #math #gd

#php #математика #gd

Вопрос:

У меня проблема с рисованием разных функций с помощью PHP (GD, конечно). Мне удалось нарисовать разные функции, но всякий раз, когда параметры функции меняются — функция перемещается туда, куда ей хочется. Допустим, у меня есть первая функция y = x ^ 2, и я должен нарисовать ее от -5 до 5. Это означает, что первая точка будет находиться в (-5;25). И я могу переместить это в любую точку, которую захочу, если я это знаю. Но если я выберу y = 2x ^ 2 с интервалом x = (-5; 5). Первая точка находится в (-5;50). Итак, мне нужна помощь в вычислении того, как переместить любую функцию, скажем, в (0;0). Функции похожи на параболу / цепную связь.

Комментарии:

1. у вас есть какой-нибудь пример кода?

Ответ №1:

Что вы хотите сделать, так это найти максимальные границы создаваемого вами графика. Для этого вы должны проверить каждую точку перегиба, а также границы диапазона. Храните каждую пару координат в массиве

Часть 1 [Границы диапазона]: Соберите координаты из границ диапазона.

 <?php
$ybound[] = f($minX);
$ybound[] = f($maxX);
  

Часть 2 [Перегибы]:
Эта часть сложнее. У вас может быть либо ряд уравнений для решения перегибов для каждого типа параболы, либо вы можете просто применить грубую силу. Для этого просто выберите небольшое приращение (каким бы ни было ваше маленькое приращение для рисования линии), я буду использовать 0.1

 <?php
for($x = $minX; $x <= $maxX; $x  = 0.1) {
    $ybound[] = f($x);
}
  

Обратите внимание, если вы применяете грубую силу, вы можете пропустить часть 1, в противном случае было бы быстрее, если бы вы могли определить перегибы для области вашего проекта

Часть 3 [Min Max]: Теперь вы получаете минимальные и максимальные значения из массива возможных значений y.

 <?php
$minY = min($ybound);
$maxY = max($ybound);
  

Часть 4 [Сдвиг]:
Теперь, когда у вас это есть, настроить это должно быть очень просто. Вы берете верхний левый угол и устанавливаете его равным 0,0, приспосабливая каждую новую координату к этому значению.

 <?php
$shiftX = -$minX;
$shiftY = $maxY;
  

С помощью этой информации вы также можете определить размер вашего изображения

 <?php
$imageX = $maxX - $minX;
$imageY = $maxY - $minY;
  

Затем, когда вы генерируете свои координаты, вы будете сдвигать каждую из них, добавляя значение сдвига к координате.

 <?php
for($x = -$minX; $x <= $maxX; $x  = 0.1) {
    $ycoor = $shiftY - f($x);
    $xcoor = $x   $shiftX;
    //draw ...
}
  

Рисовать ось также легко,

 <?php
$xaxis = $shiftY;
$yaxis = $shiftX;
  

(Я думаю, что все мои знаки верны. Простите меня, если они отключены)

Ответ №2:

Сначала вам нужно определить ограничивающую рамку вашей функции. Затем вы вычисляете ширину и высоту и нормализуете, чтобы они вписывались в прямоугольник, верхняя левая координата которого равна (0,0). Возможно, вам также потребуется масштабировать фигуру, чтобы получить ее определенного размера.