2011-07-29 176 views
0

我有一个Java小程序OpenGL模拟,我试图将 转换为HTML5画布。任何人都知道我该如何转换这些坐标?将OpenGL画布坐标转换为HTML5画布坐标

OpenGL从-400x到+ 400x和从-600y到+ 600y, ,而我的画布从0x到400x和从0y到600y 没有负坐标。

回答

0

这只是一个简单的线性函数,你需要有。线性函数的形式为f(x) = m * x + n

对于x坐标:

要映射-400〜0和400到400,所以你有两个点(-400,0),(400,400)描述你的线性关系。

现在计算与(Y2-Y1)/(X2-X1),在这个例子中,斜率m:M =(400-0)/(400--400)= 1/2

所以你的函数现在看起来像:F(X)= 1/2 * X + N

要计算N(y轴截距),你只需插入点(如(-400,0)):

0 = 1/2 *(-400)+ n

你得到n为200.所以最终函数是f(x) = 1/2 * x + 200

对于y坐标你得到g(y) = 1/2 * y + 300

+0

谢谢,我现在在工作。我今晚会测试! – tschleuss

+0

我试图做到这一点,但不起作用 'var x =?; var glMinX = -470; var glMaxX = 470; var canvasMinX = 0; var canvasMaxX = 480; var gradient =(glMinX - glMaxX)/(canvasMinX - canvasMaxX); var slope = gradient * glMinX; var yIntercept = glMaxX - slope; var newX = gradientM * x * yIntercept;' – tschleuss

+0

您想将glMinX映射到canvasMinX => Point(-470,0)(这是(x1,y1)) ,并且您想要将glMaxX映射到canvasMaxX => Point( (y2-y1)/(x2-x1)=(480-0)/(470-470)= 24/47 所以'gradient =((x2,y2)) 在本例中:yIntercept = 0 - 47/47 *( - 470)= 240 (x)= gradient * x + yIntercept so:'f(x)= 24/47 * x + 240' now f(-470)= 0 and f(470)= 480 代码: newX = gradient * x + yIntercept – Daniel