【发布时间】:2014-01-24 23:56:10
【问题描述】:
我正在用 C 语言编写一个程序(使用 allegro lib),它显示来自 txt 文件(两列 X 和 Y)的点(我可以说是一些序列)。这些是浮点数,它们可以小于零。窗口大小为 800x600。我们知道 x 的值从左到右增加,但 y 的值从上到下增加。我在声明变量和缩放时遇到了一个大问题。这是我遇到问题的一段代码:
数组 col1 由 X 值组成, col2 由 Y 值组成。我用 qsort 对它们进行排序,然后得到最小值和最大值。然后我声明窗口的高度和宽度以及比例..
float x_max, x_min, y_max, y_min;
x_max=(col1[(n-1)]);
x_min=(col1[0]);
y_max=(col2[(n-1)]);
y_min=(col2[0]);
int height, width;
height=600;
width=800;
float x_scale, y_scale;
y_scale = height/(fabsf(y_max)+ fabsf(y_min));
x_scale = width/(fabsf(x_max)+ fabsf(x_min));
现在我重新打开 txt 文件并创建未排序的数组 col1 和 col2 的数组。现在我声明 xpn 和 ypn 以从数组中获取 x 或 y 的值,然后我按比例对其进行乘法运算,最终我想显示它,但是.. 并非全部都显示出来,而且它们都显示错误。我用 abs 和 fabsf,我知道这很糟糕..
你能帮我处理这段代码,声明 x 和 y 的值并缩放它们吗?我已经尝试了几乎所有方法,但它不起作用......提前谢谢:)
float xpn, ypn;
int xpoint, ypoint;
hline( screen, 5, 300, 795, makecol( 0, 0, 0 ) );
vline( screen, 400, 5, 595, makecol( 0, 0, 0 ) );
for(i=0;i<n;i++)
{
float xpn, ypn;
xpn=fabsf(col1[i]);
ypn=fabsf(col2[i]);
int xpoint, ypoint;
xpoint=abs(xpn*x_scale);
ypoint=abs(ypn*y_scale);
putpixel(screen,xpoint,ypoint,makecol(0,0,0));
【问题讨论】:
-
实际问题是什么?你得到了什么,怎么错了?
-
我的分数小于零,所以我必须将我的窗口分成 4 个部分。
-
我仍然真的不明白这个问题,但如果你有一点,无论出于何种原因,如果它们只下降到屏幕尺寸的一半,则它们小于零(我猜你说的是 4 个部分) 从技术上讲,您可以将屏幕宽度的一半添加到 x 并将屏幕高度的一半添加到 Y。仍然真的不明白这个问题或为什么您会以负数开头
-
抱歉上面的评论,我是新来的。问题是我在(-8,7)的地方得到了例如点(-1,4)。我需要适当的缩放函数并将变量声明为 xmax、xmin 等。我必须记住,对于 x 的每个值,我必须添加 400 个像素,因为我将它分成 4 个部分,并且每个 y +300 个像素。但我不知道在哪里添加它们:c 为什么我有负面评价?我有两列和 n 个点的 txt 文件,这些点的坐标可以小于或大于零