2011-04-12 3 views
0

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

+0

у вас есть пример кода? – Yoshi

ответ

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 [Shift]: Теперь, когда у вас есть это, это должно быть очень просто настроить. Вы берете левый верхний угол и устанавливаете его на 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; 

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

0

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

Смежные вопросы