C++ 定位饼图切片问题

C++ 定位饼图切片问题,c++,charts,pie-chart,C++,Charts,Pie Chart,我使用的语言没有创建任何类型图表的内置功能。下面是我找到的代码。这是非常古老的C++代码。 圆心(原点)=(h,k) 半径=r ... void Circular_arc(constint h, constint k, constint r, constint start_angle, constint end_angle) { int color = getcolor(); float angle = (((start_angle <= end_angle) ? sta

我使用的语言没有创建任何类型图表的内置功能。下面是我找到的代码。这是非常古老的C++代码。 圆心(原点)=(h,k)

半径=r

...
void Circular_arc(constint h, constint k, constint r, constint start_angle, constint end_angle)
{
    int color = getcolor();

    float angle = (((start_angle <= end_angle) ? start_angle : end_angle)*(M_PI / 180));
    float range = (((end_angle > start_angle) ? end_angle : start_angle)*(M_PI / 180));

    float x = (r*cos(angle));
    float y = (r*sin(angle));

    do
    {
        putpixel((int)(h + x + 0.5), (int)(k - y + 0.5), color);

        angle += 0.001;

        x = (r*cos(angle));
        y = (r*sin(angle));
    } while (angle <= range);
}
...
。。。
空心圆弧(截面h、截面k、截面r、截面起始角、截面终止角)
{
int color=getcolor();
浮动角度=((开始角度开始角度)?结束角度:开始角度)*(M_PI/180));
浮动x=(r*cos(角度));
浮动y=(r*sin(角度));
做
{
像素((int)(h+x+0.5),(int)(k-y+0.5),颜色);
角度+=0.001;
x=(r*cos(角度));
y=(r*sin(角度));

}(角度<P>因为我真的不理解Turbo C++,我不能肯定。但是我认为这是你的解决方案:

void Circular_arc(constint h, constint k, constint r, constint start_angle, constint end_angle)
{
    static int offset = 0;

    start_angle = (start_angle + offset) % 360;
    end_angle = (end_angle + offset) % 360;
    offset = end_angle;

    int color = getcolor();

    float angle = (((start_angle <= end_angle) ? start_angle : end_angle)*(M_PI / 180));
    float range = (((end_angle > start_angle) ? end_angle : start_angle)*(M_PI / 180));

    float x = (r*cos(angle));
    float y = (r*sin(angle));

    do
    {
        putpixel((int)(h + x + 0.5), (int)(k - y + 0.5), color);

        angle += 0.001;

        x = (r*cos(angle));
        y = (r*sin(angle));
    } while (angle <= range);
}
void圆弧(构成h、构成k、构成r、构成开始角、构成结束角)
{
静态整数偏移=0;
起始角=(起始角+偏移量)%360;
结束角=(结束角+偏移量)%360;
偏移=结束角;
int color=getcolor();
浮动角度=((开始角度开始角度)?结束角度:开始角度)*(M_PI/180));
浮动x=(r*cos(角度));
浮动y=(r*sin(角度));
做
{
像素((int)(h+x+0.5),(int)(k-y+0.5),颜色);
角度+=0.001;
x=(r*cos(角度));
y=(r*sin(角度));

}当(angle我对其进行了改进并创建了一个方法。我做了以下操作来解决我的问题。首先,我通过创建另一个函数将开始和结束角度从度转换为弧度,该函数只将结束角度转换为弧度。调用圆弧后,我将开始和结束角度设置为vend_角的值。编写/使用的代码更少。其次,我删除了查找x,y的第一个计算,并将第二个计算移到循环中的第一个。这不是必要的,但我非常喜欢编写尽可能少的代码。我就是这样懒。第三大部分,也是第一个OP的全部原因是star调整当前弧和上一弧的末端。为此,我创建了一个变量,并将其设置为等于起始角的值。然后,我将
do while
循环中的参数设置为
while(start_angle哇!投了5张反对票,没有人插话来说明为什么这是一个如此糟糕的帖子。你们太棒了!这是我与StackOverflow有着爱恨关系的原因之一。但你们的问题是合理的糟糕。帖子中没有代码供任何人分析。当你们创建调试问题时,它必须遵守标准。)RD @ MichaelHarvey,在标准C++中没有这样的函数:“代码> GoTooYy/<代码>。你使用什么编译器?我欣赏你的输入,@ JonathanMee!我没有加任何代码的原因是因为最终结果是一种我知道的语言,很少有人使用。另外,我试图保密,这样我就可以出售终端R。在第四句中有一个链接到代码。我试图给代码的创造者提供荣誉。@ MichaelHarvey -你所发布的代码将不会在任何现代OS上运行,除非你认为20年前的MSDOS是现代OS。代码看起来像是90年初的Turbo C++。
...
void Circular_arc(constint h, constint k, constint r, constint start_angle, constint end_angle)
{
    float angle
    angle = start_angle
    do
    {

        x = (r*cos(start_angle));
        y = (r*sin(start_angle));

        putpixel((int)(h + x + 0.5), (int)(k - y + 0.5), getcolor());

        angle += 0.001;


    } while (start_angle <= (end_angle+angle));
}
...