使用glut,opengl绘制散点图矩阵

时间:2012-03-29 23:23:31

标签: glut

我是GLUT和opengl的新手。我需要绘制n维数组的散点图矩阵。 我已将数据从csv保存到向量向量,每个向量对应一行。我只绘制了一个散点图。并使用GL_LINES绘制网格。我的问题 1.如何在特定网格中绘制点?使用GL_POINTS我只能在整个窗口中绘制点。

请让我知道需要任何进一步的信息来回答这个问题

由于

1 个答案:

答案 0 :(得分:1)

您需要做的是将数据的(x,y)坐标转换为屏幕坐标。最简单的方法实际上并不依赖于OpenGL或GLUT。你所要做的就是用一点点数学。确定要在屏幕上显示(0,0)数据点的位置的屏幕(x,y)坐标,然后确定您希望屏幕上有一个增量的距离。只需获取原始数据点,应用偏移量,然后缩放它们,以获得屏幕坐标,然后将其传递到glVertex2f()(或用于指定API中的点的任何函数)。

例如,您可能希望数据中的点(0,0)位于屏幕上的位置(200,0),并且数据中0到1之间的距离在屏幕上为30像素。此操作将如下所示:

int x = 0, y = 0;  //Original data points
int scaleX = 30, scaleY = 30;  //Scaling values for each component
int offsetX = 100, offsetY = 100;  //Where you want the origin of your graph to be

// Apply the scaling values and offsets:
int screenX = x * scaleX + offsetX;
int screenY = y * scaleY + offsetY;

// Calls to your drawing functions using screenX and screenY as your coordinates

您必须确定对标量和偏移有意义的值。您还可以让程序对不同的数据集使用不同的值,这样您就可以在同一屏幕上显示多个图形。但这是一种简单的方法。

还有其他方法可以解决这个问题。 OpenGL具有非常强大的坐标转换功能和矩阵数学功能。当您开发越来越精细的程序时,这些可能会变得更有用。如果您要在屏幕上实时移动物体,或者在非常大的数据集上操作,它们将非常有用,因为它们允许您使用图形硬件非常快速地执行这些数学计算(这可以比CPU快得多。但是,CPU执行简单计算所需的时间,例如那些只会在有限的数据集上进行一次或非常偶然的计算,对于今天的计算机来说不是问题。