绘图功能从特定点开始

时间:2011-04-12 15:02:35

标签: php math gd

我在使用PHP绘制不同的功能时遇到了问题(当然是GD)。 我设法绘制了不同的函数,但只要函数的参数发生变化,函数就会浮动到任何想要的位置。 让我们说我有第一个函数y = x ^ 2,我必须从-5到5绘制它。这意味着第一个点将是(-5; 25)。如果我知道的话,我可以把它移到我想要的任何地方。但如果我选择y = 2x ^ 2,间隔为x =( - 5; 5)。第一点是(-5; 50)。所以我需要帮助计算如何移动任何函数,比方说,(0; 0)。 这些函数都是抛物线/悬链线。

2 个答案:

答案 0 :(得分: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;

(我想我的所有迹象都是正确的。如果他们不在的话,请原谅我)

答案 1 :(得分:0)

首先需要确定函数的边界框。然后,计算宽度和高度,并进行标准化,使其适合左上角坐标为(0,0)的矩形。也许您还需要缩放图形以使其达到特定大小。