繁体   English   中英

获得圆的质心 Turbo C++

[英]Getting the centriod of a circle Turbo C++

又是我。 Turbo C++ 是真正的古老。 我在获取圆的质心时遇到了问题,我编写了一个程序来显示质心的坐标,但显示器显示的是 -NAN,-NAN 而不是数字。 请指教,thnx。

unsigned char *p = rgbImage; //rbgImage = new unsigned char [ 160 * 120 * 4 ]
unsigned char *q = image; //image = new unsigned char [ 160 * 120 * 1 ]
int n = 0;
float LaserX = 0, LaserY = 0;
char* LaserMID = new char[255];

for( int j = 0; j < 120; j++ ) {
    for( int i = 0; i < 160; i++ ) {
        *q++ = *p++;
        if ( *q >= Thrshld ) {
            LaserX += j;
            LaserY += i;
            n = n + 1;
        }
    }
}
LaserX = LaserX/n;
LaserY = LaserY/n;
sprintf(LaserMID, "%.1f, %.1f", LaserX, LaserY);
ShowCo->Text = LaserMID;

您需要在除法之前检查n是否非零。

您需要处理 q 所指向的值都不大于阈值的情况:在这种情况下,n 保持为 0,最终除以 0。

此外,我不明白你为什么使用*q++ = *p++; 很难阅读(好吧,我不知道 ++ 是否发生在双方分配之前或之后)

  • 添加括号可能易于阅读
  • 在一个大的 memcpy 中做这件事会更有效率

关于原始数据,变量的名称和大小似乎表明您的 p 指针应该增加更多(例如 3 或 4 而不是 1)以始终检查相同的颜色并且不使用所有 colors 并覆盖 1/3图片(假设 memory 表示为 pixel_0_r,pixel_0_g,pixel_0_b, pixel_1_r, pixel_1_g, pixel_1_b ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM