下面的python代码(为什么)

2024-04-26 02:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python,因为它看起来很漂亮,而且我还懂一点ruby和perl。在

下面是一个在屏幕上绘制3d点的C程序。我用这个作为例子,因为它使用数组、结构和函数调用。我省略了类,因为我相信这种(OOP)的东西在所有语言中都是同时使用的(如果我错了,请纠正我)。请理解,我确实知道如何用python编写以下内容(在google的帮助下),但是我想知道您将使用哪种方法以及为什么。在

如果你没有时间或不喜欢这样的事情,请不要觉得有必要回答!

#include <stdlib.h>

int screenWidth = 10;
int screenHeight = 10;

char *buf;

inline void draw3dPoint(int *i3dPoint) {
    buf[
        (((i3dPoint[1] / i3dPoint[2]) + (screenHeight/2)) * screenWidth) +
        (i3dPoint[0] / i3dPoint[2]) + (screenWidth/2)] = 1;
}

main() {
    int x, y;
    buf = malloc(sizeof(char)*screenWidth*screenHeight);
    for(x = 0; x < screenWidth * screenHeight; x++)
        buf[x] =0;

    int *i3dPoint = malloc(sizeof(int)*3);

    i3dPoint[0] = 3; i3dPoint[1] = 0; i3dPoint[2] = 5;
    draw3dPoint(i3dPoint);

    i3dPoint[0] = 0; i3dPoint[1] = 4; i3dPoint[2] = 2;
    draw3dPoint(i3dPoint);

    i3dPoint[0] = -3; i3dPoint[1] = -4; i3dPoint[2] = 3;
    draw3dPoint(i3dPoint);

    for(y = 0; y < screenHeight; y++) {
        for(x = 0; x < screenWidth; x++)
            if(buf[(y*screenWidth)+x])
                printf("#");
            else
                printf(" ");
        printf(".\n");
    }

    free(buf);
    free(i3dPoint);

    return 0;
}

Tags: freeforperlintrubycharbufprintf
3条回答

这是一个直接端口,由于打印功能与x-if-a-else-y相结合,所以只能在python3中使用

screenWidth = 10
screenHeight = 10

buf = [False] * screenWidth * screenHeight
def draw3dpoint(x,y,z):
    pt = int((((y / z) + (screenHeight/2)) * screenWidth) + (x / z) + (screenWidth/2))
    buf[pt] = True

draw3dpoint(3,0,5)
draw3dpoint(0,4,2)
draw3dpoint(-3,-4,3)

for y in range(screenHeight):
    for x in range(screenWidth):
        print(('#' if buf[y * screenWidth + x] else ' '), end='')
    print()

如果希望打印在3.0以下的python中工作,请执行以下操作(请注意,由于奇怪的除法行为,输出是不同的,正如对这个答案的第一个注释中所指出的)。也多亏了第三条评论,我可以对这篇文章稍加改进。在

^{pr2}$

好吧,我知道你在举一个定制的例子,但我觉得学习图形概念可能会帮助你轻松地从一种语言翻译到另一种语言。在

很简单,从http://pyopengl.sourceforge.net/开始。在

OpenGL是一个标准化的图形函数库。很多游戏、渲染工具、手机等都使用它。它很简单,很强大,而且已经移植到几乎所有流行语言中。在

如果你想学习图形工具包-OpenGL是一个很好的起点。许多例子可以很容易地在C和Python或Java或其他任何你喜欢的东西之间移植,这也是很有帮助的,而且网上有无数的例子来自那些喜欢使用它和编写代码的人。在

最好的教程之一是NeHe教程-从一个简单的盒子到烟雾引擎的数十个教程,以及OpenGL中的更多教程。对于每一个例子,它们都包含了几十种语言的可下载项目或教程代码——包括C语言和Python语言,所以这应该是你开始学习的好地方。这是我学习OpenGL的地方,可以大力推荐它。不仅仅是代码,还有图形背后的理论和数学!在

  • 如果这是用于绘制(科学)数据的,我将使用numpy和matplotlib,它们组合在scipy包中。更多信息可以在SciPy页及其3D plotting examples上找到。在

原因:提供简单的数学和绘图功能,类似于matlab。在

为什么:因为它不需要您采用额外的框架,而且您可以重用您已经拥有的C风格OpenGL的大部分知识。在

相关问题 更多 >