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