【问题标题】:How to declare values of x and y to display it correctly (scaling also)?如何声明 x 和 y 的值以正确显示它(也可以缩放)?
【发布时间】: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 文件,这些点的坐标可以小于或大于零

标签: c# scale allegro


【解决方案1】:

听起来您上次的评论只需加上 +300 和 +400?

xpn=fabsf(col1[i]);
ypn=fabsf(col2[i]);

改成

xpn=col1[i]+400;
ypn=col2[i]+300;

并且您不需要以应该为正的方式获取 abs 值。

对于要交换的 y 值,您是否希望它们尝试

ypn=-col2[i]+300;

这会将负面转换为正面,反之亦然

不完全确定缩放..不确定您要如何缩放...

【讨论】:

  • 我已经改变了它,但看看我的缩放声明,它给出了一个等于 40 的值,然后我按比例将 xpn 和 ypn 相乘。在 xpn 中我有 sth + 400,如果我将它乘以 40,这对我的窗口来说太多了。当涉及到缩放时,我只想将 x 和 y 的最大值和最小值调整为我的窗口大小,因此我将高度和宽度除以某物;)
  • 我对显示正坐标的点没有任何问题。显示正负坐标点时出现问题..
  • 我做到了!在将窗口的参数(高度和宽度)除以 4 之前,我只是 putpixel 函数中的一些像素(因此缩放窗口为 200x150);)但在 putpixel 函数中,我输入了(xpoint+400),(300-ypoint) :) 问题解决了 :D 我为自己感到骄傲 :d
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 2019-10-03
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多