- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试实现用于填充矩形的简单边界填充方法(使用 4 连接方法)。我按如下方式完成(下面的代码),但是矩形没有被正确填充:当它到达矩形的一半时它停止填充。
但同样的代码在尝试填充圆圈时工作正常。谁能帮我解决问题?
提前致谢
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
void boundfill(int xc, int yc, int r, int b) {
int cur;
cur = getpixel(xc, yc);
if (cur != b && cur != r) {
putpixel(xc, yc, r);
delay(1);
boundfill(xc + 1, yc, r, b);
boundfill(xc - 1, yc, r, b);
boundfill(xc, yc + 1, r, b);
boundfill(xc, yc - 1, r, b);
}
}
void main() {
int gd = DETECT, gm;
initgraph(&gd, &gm, "..\\bgi");
rectangle(100, 100, 300, 300);
boundfill(105, 105, 4, WHITE);
getch();
closegraph();
}
输出:
但是当我对矩形使用以下坐标时,它工作正常。给定坐标:
rectangle(50, 50, 100 ,100);
boundfill(55, 55, 4, WHITE);
为此输出是:
最佳答案
您使用的是什么平台?
BGI 是非常古老的 Borland gfx API,仍然用于学习目的。如果它是原始的 Borland BGI,那么您正在创建 16 位 DOS 应用程序。还有适用于 Windows 和 Linux 的 BGI 包装器/模拟器,在这种情况下,它取决于您的编译器设置。
可能有什么问题:
堆/栈
在 16 位 DOS 模式下,您只能看到前 1 MB 的内存空间,其中 640 KB 可用于整个系统。在您的程序/项目/编译器设置中,还有其他限制,例如应用程序的初始/最大堆和堆栈大小。如果设置得太低,那么你可能会遇到堆堆栈问题,在这种情况下它应该抛出异常,但根据我的经验,我看到了很多奇怪的事情然后丢失了异常。
当您填充 100x100 像素区域时,您最多递归 10000 次并且递归调用(16 位大小写)包含:
1 x return address segment+offset = 4 Byte
4 x int16 operand = 8 Byte
1 x int local variable = 2 Byte
总共 14 字节(在某些 C/C++ 引擎上被截断为 16 字节)不计算像 putpixel 这样的子调用所需的额外数据......将它乘以递归计数,你肯定在 16 位 DOS 上远远高于安全性。要检查这个:
要修复此问题,请消除递归中所有不必要的设置,例如 b,r
是常量,因此它们可以位于全局变量中。如果您在返回之前将 xc,yc
设置回原始状态,那么您可以使用 &xc,&yc
。您的 cur 局部变量可以是静态的。这将消除递归中的所有分配,只保留返回地址。
gfx 模式
BGI 主要用于跨越 64KB 障碍的更高分辨率的 16 种颜色模式。如果您的 BGI 驱动程序有问题,它可能会挂起或停止绘图。在这种情况下,无论子弹 #1 是什么,停止都会发生在同一个地方。要避免这种更改 BGI 驱动程序,请使用不同的分辨率或更好的模拟器
关于c - C 中的边界填充算法不起作用(计算机图形学 - C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077969/
我正在对一款流行游戏 (Minecraft) 进行一些修改,我在地形生成中看到了这些线条, double d4 = 1.0D; d4 *= d4; d4 *= d4; d4 = 1.0D - d4;
如何在没有浮点单元的处理器上执行 float 学运算?例如低端 8 位微 Controller 。 最佳答案 看看这篇文章:http://www.edwardrosten.com/code/fp_te
抱歉这个冗长的标题。我的代码针对没有浮点单元的微 Controller (msp430),但这应该适用于任何类似的 MCU。 如果我将一个大的运行时变量与通常被认为是浮点十进制数 (1.8) 相乘,M
我偶尔会在这个方法中遇到 stackoverflow 异常。 double norm_cdf(const double x) { double k = 1.0/(1.0 + 0.2316419
这是一个让我在过去几个小时里完全困惑的问题...... 我的程序中有一个硬编码的方程式: double s2; s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42; 每
我知道 float 学充其量是丑陋的,但我想知道是否有人可以解释以下怪癖。在我测试的大多数编程语言中,将 0.4 添加到 0.2 会产生轻微错误,而 0.4 + 0.1 + 0.1 则不会。 两者计算
随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。 因此,Stratascratch的创始人Nathan Rosidi以及我觉
当使用 c++ 或 -O0 编译时,以下 -O1 程序给出了数值不同的结果。 #include #include #include #include int main() { std::a
我正在尝试使用 SVG 在 map 上绘制飞行路径。我在 Leaflet 之上使用 d3,但所使用的框架不会对我的问题产生影响 - 这是三 Angular 关系。 http://fiddle.jshe
使用 IEEE754 float (在 JavaScript 中)时,与数学相关的精度损失风险是什么? 10*.1 即整数乘以有理数。 最佳答案 注意:该问题经过编辑,在发布此答案后很长时间添加了“t
我需要为网站 UI 做一些基本的 float 学运算(金钱的加法和乘法)。我知道 Javascript float 由于存储方式的原因并不准确,但我也知道以某种方式,可以获得我所需的准确度。我知道这一
我有一些像下面这样的宏: #define THING_LENGTH (512) #define MAX_COUNT (4096*8) #define MAX_LENGTH ((int32)((floa
我认为这是一个非常基本的问题 - 我正在执行此功能: private double convertMetersToFeet(double meters) { //function converts
我想在不损失太多精度的情况下替换这些函数中的 float 学,因为我没有 FPU。这可能吗?我认为逗号后的 3 个数字就足够了。 inline float smaller_f(float value,
我需要一个类来表示 double vector (在数学意义上)。 我需要的特殊功能: 任意维度 vector (我通常使用 10 - 100,000 维度) 高性能(用于受 CPU 限制的数字代码)
此社区 Wiki 问题的公认答案:What are best practices that you use when writing Objective-C and Cocoa?说 iPhone 不能
This question already has an answer here: Trouble with float on C [duplicate]
以下代码有问题: private const int movementMultiplier = 2; void Test() { XmlNode xnXCoordinate = xd.Sele
大家早上好 我在 float 学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中! 我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。
我的嵌入式 C 代码在具有单精度 FPU 的 Cortex M4F 上运行。我担心编译器多久将基于软件的 double 学放在诸如 ** float_var1 = 3.0 * int_var / fl
我是一名优秀的程序员,十分优秀!