我正在尝试构建一个在JFrame上绘制函数的程序(使用JComponent)......但我似乎无法获得正确的增量以便正确绘制。
这些变量是用户定义的:
int lowerX // lower x domain
int higherX // higher x domain
int frameSizeX // horizontal frame size
int frameSizeY // vertical frame size
假设我已经成功计算了f(x):
double valuesX[n] // x points from lower x domain to higher x domain
double valuesY[n] // y points from lower x domain to higher x domain
例如,如果lowerX = -4,higherX = 4,frameSizeX和frameSizeY = 1000,并且函数是x ^ 2:
valuesX[0] = -4, valuesX[1] = -3.992 | valuesY[0] = 16, valuesY[1] = 15.936064
我正在尝试构建一个应该执行此操作的valuesYGraph []数组:
(x = -4, y = 16) valuesYGraph[0] = 0,
(x = -3, y = 9) valuesYGraph[*] = 218.75 ...
(x = 4, y = 16) valuesY[999] = 0.
* =无论哪个数组= -3
过去几天我一直试图解决这个问题,但我一直被困住了。 JComponent可以让+ y下降而不是上升,这使得它更加令人困惑......
增量也应该是普遍有效的(例如,它适用于x ^ 2以及sin(x)或x ^ 5 + 5)。
有人建议吗?谢谢你的帮助!
答案 0 :(得分:0)
你似乎已经从屏幕的一半(500px)除以16得到了值218.75然后再乘以9,得到281.25,然后从500减去。但是,如果你想让事物居中,请记住那里屏幕应该是33分,而不是32分,因为0占据一个位置。此外,您已将x范围分为1000个部分,而不是999个。
你需要将x范围分成999个部分,而不是1000个,因为如果你想在0-1范围内得到3个离散的x值,你将x除以2而不是3,得到距离0.5分开x值(0,0.5,1)。因此,你的第二个x值不应该是-3.992但是(-4 +(8/999))= -3.991991991 ......等等。
然后为你的y值做类似的事情 - >取你想要的最大范围,除以999,并用它作为增量,根据你的函数值确定正确的像素高度。