【建筑编程入门 您所在的位置:网站首页 python取余负数 【建筑编程入门

【建筑编程入门

2023-04-20 05:06| 来源: 网络整理| 查看: 265

上一章节我们已经尝试在Python电池组里写基本代码。这一章我们介绍编程的一些基本语法和数据类型。

变量与基本数据类型

首先我们需要知道什么是变量。变量是用来存储数据的内存位置,分为不同的数据类型。Python的变量支持多种数据类型,在给变量赋值的时候,解释器会自动推断变量的数据类型。Python常见的数据类型有以下几种:整型int,浮点数float,字符串str,布尔值bool。除了这些基础数据类型之外,还有一些高级的数据结构,比如列表list,元组tuple,集合set和字典dict。在这里,我们先了解前面几种基础数据类型。其他地几种数据类型在之后会慢慢补充。

首先是我们已经接触过的整数int,整数代表没有小数部分的数值,例如-1,-190,0,114115,这些都是整数,在python中整数没有最大限制,所以可以表示非常大的数。比如:

x = 100 y = -50 a = x + y print(a)

然后是浮点数float,浮点数表示具有小数部分的数值,例如0.1,-3.14以及2.0等。在Python中浮点数使用双精度,也就是64位比特。比如:

f1 = 3.14 f2 = 5 f3 = f1 + f2 print(f3)

这里要注意的是,Python可以让整数和浮点数进行直接运算,Python会自动将数据转换成浮点数:

x = 100 f1 = 2.5 a = x + f1 print(a)

第三钟数据类型是字符串str。字符串表示一系列的字符,比如字母、数字、空格和符号。在python中,需要用到双引号来表示字符串。比如我们想让变量word等于Hello, world。我们不能直接写成:

word = Hello, world #代码报错 print(word)

而是:

word = "Hello, world" print(word)

字符串之间也可以实现相加,比如:

intro = "My name is " name = "Kun" sentence = intro + name print(sentence)

但是字符串和数字不能直接相加,需要用str()将数字转换成字符串的数据类型再进行运算:

year = 2.5 word = "age" sentence = year + word #这里会报错 sentence = str(year) + word print(sentenct)

第四种数据类型则是布尔型,用来表示真True或者假False的逻辑值,所以布尔值也只有True和False这两种。布尔类型常常用于条件判断和循环控制。给变量赋值布尔类型的方法很简单,就是True和False。或者还可以通过布尔运算来实现,这个我们马上会讲。

bool_example_1 = True bool_example_2 = False

运算符

Python支持各种数据之间的算数、比较和逻辑运算符。那么以下是几种比较常见的算数运算的写法,分别是加法、减法、乘法、除法、取余、幂运算以及整除。以下是代码示例:

a = 5 + 3 #加法 b = 4 - 6 #减法 c = 5 * 3 #乘法 d = 8 / 5 #除法 e = 8 % 3 #取余 f = 5 ** 3 #幂运算 g = 7 // 3 #整除

加减乘除这个常规的四则运算就不说了,大家应该很清楚。然后取余、幂运算和整除这三个运算,大家可以试着用print命令把结果打出来。

print(e,f,g)

然后我们就知道,取余就是取8除以3的余数,3乘以2得6,6加2等于8,所以余2。幂运算也就是次方,f的意思就是5的三次方,5乘5等于25,25再乘5等于125。整除和取余刚好相反,得到的结果是能整除的部分不要余数。

这里顺便说一下,用Python时我们要善于运用print命令来检查代码运行的过程,这对于我们梳理代码逻辑和debug十分重要。再一个就是Python里井号#之后的内容被视为注释,它不会对代码有任何影响,但是能给阅读代码的人起到很好的提示作用。

然后我们说第二种运算符,比较运算符。比较运算一般用于比较大小关系,运算结果是布尔型。最常见的当然是大于、小于和等于,还有大于等于、小于等于和不等于。如果两个变量符合比较运算符的逻辑的话,那么输出结果是True,反之则为False。以下是代码的示例,大家可以看看哪些结果是True,哪些是False:

x = 5 y = 10 a = x > y #大于 b = x < y #小于 c = x == y #等于 d = x >= 2 #大于等于 e = y 0 and a < b #返回为True #判断a是否等于5或b是否等于5 result = a == 5 or b == 5 #返回值为True #判断a和b是否都大于3 result = a > 3 and b > 3 #返回值为False

Rhino中特有的数据类型

作为设计师,我们更多的会关注代码的可视化内容,或者说我们更关注利用代码来生成几何形体。而Rhino作为3D建模软件,也提供了很多几何数据类型,这也是为什么我们推荐设计师使用Rhino来学习编程的原因。一方面我们可以提高自己的编程知识水平,另一方面学到的编程知识能够快速地应用在设计领域,产生正反馈。这样的学习未来无论是转行还是在业内深耕都有帮助。

由于这些数据类型不是Python原生的,而是Rhino API提供的的数据类型和方法,所以我们需要在代码的最开头写上一行命令,来调用Rhino API的数据:

import Rhino.Geometry as rg

这句话的意思是,我们在Python里导入RhinoCommon库中的几何模块,并命名为rg。通过这个模块,我们可以创建点、线、曲线、面等几何图形。接下来我们从基础的几个几何图形开始讲解。

首先是三维点Point3d,这个数据类型也是在使用Rhino编程中最常用的一种。要确定一个三维点,需要x,y和z三个方向的坐标,以下是一个创建三维点变量的代码示例:

import Rhino.Geometry as rg point = rg.Point3d(1,1,0)

创立了三维点之后,我们可以访问和修改它的坐标值:

import Rhino.Geometry as rg point = rg.Point3d(1,1,0) xCoor = point.X #获取点的x坐标 yCoor = point.Y #获取点的y坐标 point.Z = 10 #将点的z坐标改为10 print(xCoor, yCoor, point.Z) #输出点的三个坐标

但此时我们还不能在Rhino中看到这个点,我们需要将数据传递给输出变量,才能在Rhino中看到我们生成的点。我们在最后加上一行代码:

a = point

Point3d点之间能进行加减运算,其结果为坐标值的相加或相减:

import Rhino.Geometry as rg pt1 = rg.Point3d(1,2,3) pt2 = rg.Point3d(-1,0,1) pt3 = pt1 + pt2 print(pt3) #输出为 0,2,4

Rhino还为Point3d提供了许多方法,例如计算点和点之间的距离:

import Rhino.Geometry as rg pt1 = rg.Point3d(3,4,0) pt2 = rg.Point3d(0,0,0) distance = pt1.DistanceTo(pt2) #计算pt1到pt2的距离 print(distance) #输出结果为5.0

点是一切几何的基础。介绍完了点,自然就有线的数据类型。最常见的线就是线段Line,Line包含两个Point3d对象,From和To,也就是线段的起点和终点。以下是创捷Line对象的一个例子:

import Rhino.Geometry as rg pt1 = rg.Point3d(1,2,0) pt2 = rg.Point3d(0,0,0) ln = rg.Line(pt1,pt2) #创建一个从pt1到pt2的线段

同样的,我们可以通过类似的方法计算点和线段之间的距离:

import Rhino.Geometry as rg # 创建一个 Point3d 点 point = rg.Point3d(1, 2, 3) # 创建一条线 line_start = rg.Point3d(0, 0, 0) line_end = rg.Point3d(5, 5, 5) line = rg.Line(line_start, line_end) # 找到线上离点最近的点 closest_point_on_line = line.ClosestPoint(point, True) # 计算点到线的距离 distance = point.DistanceTo(closest_point_on_line) # 输出距离 print(distance)

在这个例子中,我们创建了一个Point3d点和一条线,然后使用line.CloestPoint(point,True)方法找到在线上距离点最近的点,然后计算这两个点的距离。

Rhino API中还有一个很重要的类,就是Vector3d三维向量。Vector3d三维向量包括三个浮点数:X、Y和Z,分别表示向量在三维坐标系中的X轴、Y轴和Z轴的分量。以下是创建Vector3d对象的示例:

import Rhino.Geometry as rg v = rg.Vector3d(0,1,0)

与Point3d类似,可以通过类似的方法获取Vector3d对象的属性,也可以进行加减运算,也能进行点乘:

import Rhino.Geometry as rg v1 = rg.Vector3d(0,1,0) v2 = rg.Vector3d(1,1,0) xCoor = v1.X #获取v1的x坐标 v2.Y = 2 #修改v2的y坐标 v3 = v1 + v2 #向量相加 v4 = v3 * v1 #向量点乘

Rhino API也提供了许多关于向量有用的方法:

import Rhino.Geometry as rg v1 = rg.Vector3d(1,0,0) v2 = rg.Vector3d(2,1,0) length = v1.Length #获取v1的长度 v2.Unitize() #将v2单位化

向量不能在Rhino中直接显示出来,我们可以在Grasshopper里通过增加vector display的电池组显示向量。这个电池组的第一个输入为向量的起始点,第二个输入为向量的值。例如:

import Rhino.Geometry as rg pt = rg.Point3d(0,0,0) v = rg.Vector3d(1,1,0) a = pt b = v

此外,Rhino API还提供了许多不同的数据类型和方法,部分知识我们会在稍后涉及。这里十分推荐大家去参阅Rhino API的官方网站,了解具体数据类型的使用:

Rhino - API References (rhino3d.com)

至此,我们已经简单介绍了python的一些基本语法和数据类型,包括Rhino里特有的一些几何类。我们也在这一期也留了几个训练题给大家巩固知识的理解和应用。

训练题:

1.请制作一个python电池组(如图所示),它有x,y和z三个float数据类型的输入。并以这三个数值为三维坐标建立一个点point1,另外用代码建立一个坐标为(1,1,0)的点point2。计算这两个点的距离,输出一段话”点x,y,z到点1,1,0的距离为xxx“。

2.已知Rhino API 提供了Circle这个数据类型,想要新建一个Circle变量,需要一个中心点和一个半径数据。请建参照Line的创建方法,创建一个圆心在(5,3,0)半径为2.5的圆。

3.请制作一个python电池组,有三个输入变量,分别是圆心的x坐标,圆心的y坐标和圆的半径(圆心z坐标默认为0)。并将圆心、圆和圆心指向(1,1,0)向量方向的半径可视化出来。

以上就是今天的训练题,讲解会在之后的P2视频放出。初步掌握这些数据类型,就像在Sketch Up或者AutoCAD里了解如何建立矩形、圆形等等基本的元素。这些元素会在以后的学习中不断用到,是万丈高楼平地起的基础,十分的重要。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有