Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算圆上的整点_C++_Geometry - Fatal编程技术网

C++ 计算圆上的整点

C++ 计算圆上的整点,c++,geometry,C++,Geometry,我写了一个小程序,但它给出的答案总是错误的,下面是代码 double radiusc; double xcenter; double ycenter; bool onthecircle(int x,int y); int main(void) { int inputwait; printf("Please enter x coordinate of your center point: "); scanf("%d",&xcenter); prin

我写了一个小程序,但它给出的答案总是错误的,下面是代码

double radiusc;
double xcenter;
double ycenter;

bool onthecircle(int x,int y);


int main(void)
{
    int inputwait;

    printf("Please enter x coordinate of your center point: ");
    scanf("%d",&xcenter);

    printf("Please enter y coordinate of your center point: ");
    scanf("%d",&ycenter);

    printf("Please enter the radius of the circle: ");
    scanf("%d",&radiusc);

    double left_x = xcenter - radiusc;
    double left_y = ycenter;

    double down_x = xcenter;
    double down_y = ycenter - radiusc;

    if(left_x >= floor(left_x))
    {
        left_x = floor(left_x);
        int (left_x);
    }
    else
    {
        left_x = floor(left_x) + 1;
        int (left_x);
    }

    for(left_x; left_x<=xcenter; left_x++)
    {
        for(left_y;left_y>ycenter-radiusc;left_y--)
        {
            if(onthecircle(left_x,left_y))
                printf("Jest na kole: %d , %d \n", left_x,left_y);
        }
    }

    scanf("%i",&inputwait);

    return 0;
}

bool onthecircle(int x,int y)
{
    double t1= x - xcenter;
    double t2 = x - ycenter;

    if ((t1*t1 + t2*t2) > (0,9 *radiusc*radiusc) &&
        (t1*t1 + t2*t2) < (1,1 *radiusc*radiusc))
        return 1;
    else
        return 0;

}
双半径;
双xcenter;
双中心;
圆上的布尔(整数x,整数y);
内部主(空)
{
int输入等待;
printf(“请输入中心点的x坐标:”;
scanf(“%d”和&xcenter);
printf(“请输入中心点的y坐标:”;
scanf(“%d”和&ycenter);
printf(“请输入圆的半径:”);
扫描频率(“%d”和半径);
左双_x=xcenter-radiusc;
左双y=中心;
双向下_x=xcenter;
双下y=圆心-半径;
如果(左x>=地板(左x))
{
左x=地板(左x);
int(左x);
}
其他的
{
左x=楼层(左x)+1;
int(左x);
}
用于(左x;左x中心-半径;左y--)
{
if(在椭圆上(左x,左y))
printf(“开玩笑的玩笑:%d,%d\n”,左x,左y);
}
}
scanf(“%i”、&inputwait);
返回0;
}
圆上的布尔(整数x,整数y)
{
双t1=x-xcenter;
双t2=x-中心;
如果((t1*t1+t2*t2)>(0,9*半径*半径)&&
(t1*t1+t2*t2)<(1,1*半径*半径)
返回1;
其他的
返回0;
}

当我调试时,输入0,0作为我的中心,r=1,它给我点0和一些大的数字,而不是将1保存为r的值,它得到一个随机的大数字,我不知道为什么。有什么想法吗?

您对
scanf
的格式错误<代码>%d表示十进制整数。您需要将
%lf
用于


<>你说,为什么你不使用C++风格的I/O,即<代码> <代码>,<代码> cOUT <代码>,<代码> CIN < /代码>等等?这看起来像是C和C++的丑陋混合。

< P>你的格式到<代码> SCANF是错误的;代码>%d表示十进制整数。您需要将
%lf
用于


<>你说,为什么你不使用C++风格的I/O,即<代码> <代码>,<代码> cOUT <代码>,<代码> CIN < /代码>等等?这看起来像是C和C++的一些难看的混合。

< P>除了ED发现的问题之外,<代码> 0,9< /代码>不是有效的浮点常数;您需要
0.9
。(区域设置可以影响输入和输出表示;它们不影响语言语法。)

(0,9*radiusc*radiusc)
中的逗号是逗号运算符,而不是小数点;将半径的平方乘以9

您缺少程序顶部的
#include
#include
(对于
floor()
)(您的编译器可能会让您不受影响,但这不是可选的)

您的
printf
调用中的格式不正确;您需要
%f“
%g”
来表示'double'

更多:

使用
double
作为循环控制变量是有问题的。调用
scanf(“%i”,&inputwait);
在没有提示的情况下终止程序之前等待输入是用户不友好的。不需要使用全局变量。我不知道
int(左)是什么;
应该这样做;我认为它被解析为一个声明(一个你从未使用过的变量)括号是多余的。你使用类型名称<代码> BoOL 意味着你编译你的代码为C++,或者你有<代码> >包括< /C> >或“代码> BoOL < /代码>,你没有费心地告诉我们。


这差不多是我现在愿意做的调试。修复这些错误,然后重试。

除了Ed发现的问题外,
0,9
不是有效的浮点常量;您需要
0.9
(区域设置可以影响输入和输出表示;它们不会影响语言语法。)

(0,9*radiusc*radiusc)
中的逗号是逗号运算符,而不是小数点;您将半径的平方乘以9

您缺少程序顶部的
#include
#include
(对于
floor()
)(您的编译器可能会让您不受影响,但这不是可选的)

您的
printf
调用中的格式不正确;您需要
%f“
%g”
来表示'double'

更多:

使用
double
作为循环控制变量是有问题的。调用
scanf(“%i”,&inputwait);
在没有提示的情况下终止程序之前等待输入是用户不友好的。不需要使用全局变量。我不知道
int(左)是什么;
应该这样做;我认为它被解析为一个声明(一个你从未使用过的变量)括号是多余的。你使用类型名称<代码> BoOL 意味着你编译你的代码为C++,或者你有<代码> >包括< /C> >或“代码> BoOL < /代码>,你没有费心地告诉我们。


这差不多是我现在愿意做的调试。修复这些错误并重试。

@Keith:谢谢,错过了
l
。那么长浮点与双精度浮点相同?@Keith:谢谢,错过了
l
。那么长浮点与双精度浮点相同?@myrkos:您可以自己定义它(例如,
typedef enum{false,true})bool;
,或者在C99中你可以
#包含
。它必须是C99,因为所有变量都不是在函数顶部声明的。我的问题是;
int(left_x)
在做什么?@EdS:我认为它被解析为变量声明;括号是多余的。(我不知道它应该是什么。)更改将双精度设置为inti的错误括号应为(int)x而不是int(x)@myrkos:您可以自己定义它(例如,
typedef enum{false,true}bool;
,或者在C99中,您可以
#include
。它必须是C99,因为所有变量都不是在函数顶部声明的。我的问题是;