gpt4 book ai didi

c - C图形:如何在屏幕上绘制x-y轴?

转载 作者:行者123 更新时间:2023-11-30 16:57:23 26 4
gpt4 key购买 nike

我找到了相同的代码。但是我没有完成工作。有人可以向我解释代码吗?
这里xmid = getmaxx()/ 2和ymid = getmaxy()/ 2。
我想知道为什么我们将这些用于循环?为什么要使用itoa()函数?

line(5,ymid,getmaxx()-5,ymid);
line(xmid+3,5,xmid+3,getmaxy()-5);

for( i= xmid+gap;i<getmaxx()-5;i=i+gap)
{
outtextxy(i,ymid-3,"|");
itoa(i-xmid,str,10);
outtextxy(i,ymid+3,str);
}
for( i= ymid-gap;i>5;i=i-gap)
{
outtextxy(xmid,i,"-");
itoa(ymid-i,str,10);
outtextxy(xmid+5,i,str);

}
for( i= xmid-gap;i>5;i=i-gap)
{

outtextxy(i,ymid-3,"|");
itoa(-(xmid-i),str,10);
outtextxy(i-6,ymid+3,str);

}
for( i= ymid+gap;i<getmaxy()-5;i=i+gap)
{
outtextxy(xmid,i,"-");
itoa(-(i-ymid),str,10);
outtextxy(xmid+8,i,str);
}

最佳答案

请注意此答案:我不拥有Turbo C / C ++,因此此答案基于查找功能定义和签名以及从那里将内容拼接在一起的结果。

(1)itoa是一个非标准的C函数(特定于Microsoft?),它将整数值转换为字符串。它具有签名:char* itoa(int, char* int);。它采用第一个参数中的值,并将其转换为第二个参数中的字符数组。最后一个整数参数是用于转换字符串的基数。例如,如果int b = 33,我们将有:

    char buf[33];
itoa(b, buf, 10); // buf would contain '3', '3', '0'
itoa(b, buf, 16); // buf would contain '2', '1', '0'
itoa(b, buf, 2); // buf would contain '0', '0', '1', '0', '0', '0', '0','1'


(2)outtextxy函数用于在屏幕上绘制字符串,并具有函数签名 outtextxy(int x, int y, char* string);参数的拳头给出字符串要开始的位置的x和y坐标(以像素为单位)。

(3)line函数用于在屏幕上绘制一条线,并具有函数签名 line(int x1, int y1, int x2, int y2);,其中前两个参数是第一个起点的x和y坐标(以像素为单位),后两个坐标为(以像素为单位)是最后一点。

(4) getmaxx()getmaxy()根据分辨率返回屏幕的宽度和高度(以像素为单位)。因此,如果您以1024 x 768的分辨率运行,则 getmaxx()将返回1024,而 getmaxy()将返回768

了解各个函数的功能后,我们可以分析代码片段:

    line(5,ymid,getmaxx()-5,ymid);


这将在屏幕中间绘制一条线,从左侧开始5个像素,从右侧右侧开始延伸5个像素。没有看到完整的代码,我必须假设 ymid是屏幕的中点,即 int ymid = getmaxy()/2;

    line(xmid+3,5,xmid+3,getmaxy()-5);


假设与 int xmid = getmaxx();类似,则此函数将绘制一条垂直线,该垂直线从屏幕下方的5个像素到屏幕底部的5个像素。另外,请注意,我们将 xmid偏移了3,因此该行将偏离中心向右偏移三个像素。在没有看到更多代码或此代码段上下文的情况下,我不知道为什么原始作者选择这样做。

    for( i= xmid+gap;i<getmaxx()-5;i=i+gap)
{
outtextxy(i,ymid-3,"|");
itoa(i-xmid,str,10);
outtextxy(i,ymid+3,str);
}


我们不知道 gap的值是什么,但是为了争论起见,让我们假设它是20,并且还假设我们的屏幕分辨率是1024 x768。基于这些假设,我们可以得出以下结论:


xmid将是512
getmaxx()将返回1024
i将以532开始并运行,直到以20的步长超过1024。


从中我们知道 i将具有序列{532,552,572,....,992,1032}。有了这个,我们可以看一下代码的下一行,并看到输出文本将绘制一个“ |”。使用上述每个i值和x坐标,并使用y值 ymid-3。我对这行代码的最佳猜测是,它负责以 gap间隔在x轴下方几个像素处绘制刻度线。

在下一行中,值 i-xmid将仅返回到中心的距离,并将其转换为字符串。因此,例如,第一次通过循环 i将为532,如果减去 xmid,我们将得到20,并且将使 str的值为“ 20”。因此,这行代码只是生成刻度标记的标签。

for循环主体中的最后一行将在正确的位置打印出字符串,注意outtextxy函数调用中的x和y值,因此标签被打印在x轴上方几个像素处。

我没有分析其他三个循环,但是我怀疑它们在做同样的事情,在轴上画了刻度线。我们使用四个for循环来处理每个轴上的正向和负向。

关于c - C图形:如何在屏幕上绘制x-y轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39558946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com