我试图了解如何在不使用库函数的情况下绘制一组形成圆圈的点(/设置像素)。
现在,获取给定半径的点的 (x,y) 坐标非常简单。
for (x=-r; x <r; x=x+0.1) {
y = sqrt(r*r - x*x);
draw(x,y, 0, 0);
}
但一旦我有了这些点,如何真正画出圆圈才是令我困惑的。我可以使用图形库,但我想了解如何在不使用图形库的情况下做到这一点
void draw(float x, float y, float center_x, float center_y) {
//logic to set pixel given x, y and circle's center_x and center_y
// basically print x and y on the screen say print as a dot .
// u 'd need some sort of a 2d char array but how do you translate x and y
// to pixel positions
}
有人可以分享任何链接/参考资料或解释其工作原理吗?
char display[80][26];
void clearDisplay(void) {
memset(display, ' ', sizeof(display));
}
void printDisplay(void) {
for (short row=0; row<26; row++) {
for (short col=0; col<80; col++) {
printf("%c", display[col][row]);
}
printf("\n");
}
}
void draw(float x, float y, float center_x, float center_y) {
if (visible(x,y)) {
display[normalize(x)][normalize(y)] = '.';
}
}
EDITH:您更改了评论,以纳入更多问题,所以我将稍微扩展一下我的答案。
你有两组坐标:
- 世界坐标(如世界地图上的经度和纬度或电磁显微镜上的飞米计)这些主要是您的 x 和 y
- 显示坐标:这些是您的显示设备(例如 Nexus 7 或 Nexus 10 平板电脑)及其物理尺寸(像素或像素或每英寸点数)的表示
您需要一个度量,将您的世界坐标转换为显示坐标。让事情变得更复杂的是,您需要一个窗口(您想要向用户展示世界的一部分)来剪辑您无法显示的内容(例如当您想要向用户展示欧洲时是非洲)。您可能想要缩放世界坐标以匹配您的显示坐标(您想要显示多少欧洲)
这些指标和剪报是简单的代数变换
- 将世界坐标缩放到显示坐标:display-x = world-x * 因子(飞米或公里到像素)
- 将世界中心转换为显示中心:display-X + 调整
等等。只是维基百科的“代数变换”或“几何”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)