2011-04-12 39 views
0

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

+0

你有一些示例代码? – Yoshi 2011-04-12 15:23:50

回答

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部分[最小最大值]: 现在您可以从可能的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)的矩形。也许你还需要将这个数字调整到特定的大小。

相关问题