原标题:借助Python Turtle,了解计算机绘图的坐标系

学习Python turtle,你不可避免地要和坐标系打交道。在计算机程序中,坐标系是怎么表现的。《Python-Turtle图形编程入门》课程第二课“设置画布”介绍了Python中的坐标系,这篇文章中,牛毅昕老师将拓展一步,认识计算机绘图中的坐标系。

坐标系相信大家都不陌生,我们学习数学时都会接触坐标系的概念。下图就是我们最常用的笛卡尔坐标系。

坐标系的类型有很多,如地球上的经纬度,平面中的X轴,Y中,还有3D中的Z轴,这些我们都叫坐标系。同时,坐标系也是计算机绘图的核心概念,在计算机屏幕上,画面是由一个个像素组合而成的,坐标系会给图形中的每个像素点都提供一个精确的位置。

在计算机的发展当中,涌现了很多很多的带有绘图功能的程序,例如常用的绘图软件Photoshop,CAD, illustrator等,它们通过坐标系确定每一个点的颜色和位置。

Photoshop中课程图片,每个像素都对应着独一的坐标

除了绘图软件,对于游戏来说坐标系也很重要。除了最早期的MUD(文字类网络游戏)以外,只要是有图形界面的游戏,坐标系和坐标系定位都是这些游戏的重要组成部分,从地图的加载到人物模型,在到打击判定等等,这一切的一切都要以坐标为基础。

最早有记录的电子游戏诞生于1952年,为井字棋游戏(Tic-Tac-Toe)

井字棋游戏就采用坐标来定位每一个格子,这种方法一直沿用至今。

例如在仙剑奇侠传中,在很多的地图上大家都可以看见类似这种方格,这种方格除了早当时除了起到视觉效果以外,另一个最大的作用就是用坐标来定位和记录位置了。

在星际争霸中,大家直接看不出地图的格子,当我们用鼠标选中操作角色的时候,或者是用鼠标右键点击地图上移动的时候,都会出现一个绿色的圆框,这个其实也 是坐标系定位的体现。

在早期游戏中,我们也能看出画面中的小区块的排布,也是简单的绘图坐标系的展现。

恶魔城FC版

在我的世界(Minecraft)游戏中,坐标系就升级到了三维。除了X轴和Y轴以外,多一个Z轴

通过观察游戏画面,我们可以直观的感受到画面绘图的坐标体现。接下来,我们借助Python Turtle,更进一步了解坐标系与计算机绘图的结合应用。

Python Turtle中使用2种坐标系:屏幕坐标系和笛卡尔坐标系。

屏幕坐标系:

电脑或者手机屏幕的坐标系,单位为像素。电脑坐标系的X轴从左往右递增,Y轴从上往下递增。即:屏幕的最左上方可见像素的坐标是(0,0)。

X、Y的可视值域取决于你的显示器分辨率。以1024×768的分辨率为例,X的值就在0~1024之间,Y的值在0~768之间,只要超出这个范围,我们就看不见了,当然 这样也没有什么意义了。

图中的代码,在setup方法中指定了窗口的宽和高,然后起始X和起始Y都是0,运行的时候这个窗口将会出现在大家计算机屏幕的左上角,大家可以更改后2个参数,看看窗口启动的时候发生的位置变化。所以屏幕坐标系的原点(0,0)是从左上角开始的,这一点上跟笛卡尔坐标系有所差别。

笛卡尔坐标系:

在创建GUI窗口的的还时候,使用的是屏幕坐标系,那么窗口创建好了以后,我们开始绘图的时候,使用的是否还是屏幕坐标系呢?我们来看图说话:

相信看了科技学堂Python Turtle课程视频的同学应该清楚这三行代码能出现什么效果了吧。其实很简单,就是在屏幕上画一条长度为100px的直线。那么这条直线会使用哪种坐标系呢?

在画这条线的时候,我并没有指定起始的X和Y,那么默认就是0,0但是根据刚才的效果来看,这条线应该是从左上角开始画的,为什么会出现在中间呢?

在这里,需要大家注意的是,GUI程序分为2个层(仅限与2D ,3D不在我们本次的讨论之内),第一层,就是我们第一次代码创建的的窗口。这个窗口的坐标系使用的是屏幕坐标系,也就是X,Y的原点是在屏幕左上角。第二层,也就是我们画线的这一层,由于他的范围是在我们创建的这个窗口之内的,并不受限与屏幕,所以第二层的坐标系使用的就是数学中的笛卡尔坐标系。

我们将代码修改一下,这样大家能看的更直观:

以上的代码也非常简单,让海龟绘制一个三角形:

由于Turtle可以看到绘制过程,所以在运行代码的话我们会发现海龟是从这个窗口的中间开始绘制的。由于默认是从左往右画的,所以图形会出现在窗口的右边。如果我们在代码中我们加入了turtle.pos方法来打印当前海龟的坐标,会得到下面的结果:

从结果里我们可以看出,在程序刚运行的时候海龟的坐标确实是原点(0,0)那么这个时候原点就是在这个窗口的中间了。所以在绘制的时候所使用的坐标就是数学中的笛卡尔坐标,这个跟我们创建这个GUI程序的时候的坐标是有所不同的。我们在来看一个稍微复杂的例子:

绘制五角星,大家如果运行程序的话会发现,也是从窗口的中间开始画的:

并且我们来看一下输出的坐标

最开始的时候也是0,0 说明原点确实是在这个窗口的中间 。

通过这2个图形的案例,相信大家能区分开来了。在创建GUI程序的时候使用的是屏幕坐标系,原点(0,0)在屏幕的左上角,而我们在这个程序上开始绘制图形的时候,坐标的原点就会编程窗口的中间了,也就是开始使用数学中的笛卡尔坐标系了。

那么坐标系的定位功能如何来体现呢?

这是使用turtle绘制的国际象棋棋盘的例子,大家可以看到一格一格的非常明显,如果我们需要完善这个国际象棋的游戏的画,落子只需要通过坐标来判断是否在格子之内就可以了。这样一来通过坐标我们就可以实现游戏理的定位功能了。我们用turtle绘制棋盘的过程就和游戏中棋盘绘制的机制很接近了。

现在是不是对程序中的坐标有一点了解了呢?如果对Turtle或者Python有兴趣,点击下方小程序报名《 Python-Turtle图形编程入门》课程吧。返回搜狐,查看更多

责任编辑:

python绘制坐标系_借助Python Turtle,了解计算机绘图的坐标系相关推荐

  1. python绘制星空_用python画星空源代码是什么?

    用python画星空源代码是什么? 用python画星空源代码是from turtle import * from random import random,randint screen = Scre ...

  2. 用python绘制图形_使用Python的turtle画炫酷图形

    例子一: import turtle t = turtle.Pen() turtle.bgcolor("black") sides=6 colors=["red" ...

  3. 用python绘制六角形_使用Python的turtle库实现六角形以及正方形螺旋线的绘制

    1.六角形的绘制 思路:一个六角形可以看作是两个等边三角形具有共同的中心且垂线互成60°角.所以只需实现一个等边三角形的绘制以及第二个三角形绘制起点的移动即可. 代码如下: import turtle ...

  4. python 情绪分析_借助Python进行情绪和情感分析

    python 情绪分析 Modules to be used: 使用的模块: nltk, collections, string and matplotlib modules. nltk , coll ...

  5. python绘制月亮_用Python写一个嫦娥奔月,中秋快乐

    原标题:用Python写一个嫦娥奔月,中秋快乐 月是故乡明,每到中秋佳节,很多在外打工的码农因为工作不一定能回家团圆.今时今日不知有多少人为了生计.为了事业.为了理想远走他乡,在一座陌生的城市中寻求一 ...

  6. python绘制月亮_用python画月亮的代码是什么?

    用python画月亮的代码是什么? 用python画月亮的代码是import turtle as t t.screensize(800,600,"#483d8b")#画布尺寸和颜色 ...

  7. python 绘制平滑曲线_用python绘制概率图形曲线

    在使用线性回归时,你可能已经遇到过一种概率图形-QQ图(quantile-quantile).在拟合模型之后我们应该检查回归的残差是否遵循正态分布.并且可以通过使用如下所示的QQ图来进行视觉验证. Q ...

  8. python绘制等值线图_使用python祏rfer绘制等值线图的方式适题。

    登录捍更多精彩内容~ 您应该 登录 才可以下载淮surfer怎么画等值线,没有帐号? x 本帖最簈ianz98 于 2019-6-10 16:26 编辑 几年前用VB搞过surfer自动绘制等值线图. ...

  9. python绘制中国_使用python绘制中国地图

    前言 有的时候需要将一些相关的数据放到地图上,可以更加直观的展示,人们也更加容易的阅读理解.比如一些大企业的全国分布,全国各地的温度数据,上映电影的各地票房情况等等.为了实现将数据可视化与地图相结合, ...

  10. 用python读取股票价格_借助Python获取股票实时价格的操作方法

    今天和大家分享一下使用Python获取股票实时价格的操作方法. 工具/原料 Python软件 可以联网的电脑 方法/步骤 1 要想获取股票数据,我们需要借助第三方模块.我们首先需要打开开始菜单. 2 ...

最新文章

  1. 再议.Net中null的使用规范
  2. C#使用 System.Net.Mail发送邮件功能
  3. android 模拟来电广播,在Android模拟器上模拟来电
  4. 基于visual Studio2013解决C语言竞赛题之0304整除数
  5. Linux中的update和upgrade的作用
  6. Unity中国张俊波:Unity的国际化、本土化、全球化 | 2019WISE超级进化者大会
  7. 在C#中使用Google翻译API
  8. python如何搭建环境_Python基础环境如何搭建
  9. VirtualBox虚拟机如何扩容
  10. python 字符串中符号的意义
  11. Android GSON解析JSON数据
  12. fuel6.1搭建openstack
  13. MATLAB安装“geoidegm2008grid.mat”数据(EGM2008模型计算大地水准面和高程异常)
  14. python如何求偏导_求偏导数怎样做啊
  15. 如何用photoshop识别图片上文字的字体
  16. Java程序员进阶书籍 ,看这11本书就够了
  17. u盘最大单个文件支持多少g_USB 文件传输单个文件最大能用多少G???
  18. CSP-J/S2022游寂寞记
  19. Java秒杀系统实战系列~数据库级别Sql的优化与代码的调整
  20. 【无标题】sap-ecc6.0 ides 安装过程记录

热门文章

  1. 自动玩Chrome小恐龙游戏
  2. 美区苹果id关闭双重认证_苹果帐号在双重认证的情况下被更改受信任手机号,导致帐号被锁,且无法解锁...
  3. word操作 mathtype插入公式 表格
  4. Clone 1. 肿瘤克隆进化之前世今生
  5. VBA字典(dictionary)
  6. [Excel] 数据透视图
  7. html5分辨率异常自动检测
  8. 计算机vb输入框函数,VB基本函数大全
  9. git 配置 diff 、 merge 工具: kdiff3
  10. 支付宝第三代理支付 - 支付宝客户端授权