太极图形课S1第02讲:元编程与面向对象编程

视频在这

太极图形课S1第02讲:元编程与面向对象编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11q4y1P7os?spm_id_from=333.999.0.0&vd_source=7b5f7987f682b668c4568616fa2beb2d看视频的时候顺便记了点东西。

P1 基础回顾

 上一节,主要讲了这4点。

 Taichi里所有的拷贝,默认是值传递

Python里,址传递,某个大作业里用过,一处改,处处改

关于field的要注意的一点 

shape为空,表示标量。

直接赋值,是python里的地址传递,会出问题。

应该用copy——from

关于python全局变量要注意的一点 

编译的时候,会把python-scope中的变量都编译成常量。

及时编译,编译的时候是啥值,以后就认为是啥值……当常数看了……

可以用field,或直接从python向里面传参。

回顾完了,下面是正文。

元编程,和OOP。主要是为了让代码写的更好读。 

例子是这段代码

GitHub - taichiCourse01/--Galaxy

 P2 元编程

介绍

元。。是啥?

3条流水线——》3条车

 1个图纸,稍微修改——》3条车

 元,有点实例化的感觉?

 并行计算,模板化。

大概是两点,先看第一点

第一点

field 不能直接赋值,因为会指向同一段内存,所以有了一个普通的copy函数。

 高级了一点:

 又高级了一点,并行拷贝,加速

有ti.kernel,就并行了

但是,那个ti.template()有什么用?

 有什么用?

可以传参数。Taichi最多只能传8个强类型的标量,field不是标量,不能传。

但是template什么都可以,可以传field进去的。

模板,泛型什么的

 能传很多东西

但也有不能传的东西,不如python的list,Taichi不认识就传不了。可以改成ti.vector

 而且,都是引用传递

因为,python的参数,传进去以后,就是常量了,就不能改了。硬改就会报错。

 可以改全局的这个field

 还可以把size去掉

 如果是2D的,还这么for会出问题

 如果这么搞,就行了

 还可以group一下,这个是什么?

 Metadata,描述数据的数据……啊?

比如矩阵的Metadata就是矩阵的R,C...

debug为true,assert才被执行……emm……不会。

 

 模板的实例化

 第二点

一点加速的建议

类似define吧,少走点if,else的分支,对应CPU的分支预测加速。

 

  有时,必须用static,比如里面的for

 总结

维度无关编程能用到

static能加速

 

 实际例子

P3 面向对象编程

面向过程的

 

 面向对象的

了解过一点

 

 

 

 还可以继承,QT里继承的就不少,继承窗口类什么的

 加点太极特色:

 

 这个@。。。有啥用?

包含很多结构体的数组,包含很多数组的结构体 

两种数据表示方法

  • 100个结构体数组,每个结构体里是3个参数,身高体重什么的
  • 3个结构体,表示身高体重什么的,每个结构体里是100个参数

taichi倾向后一种

 可以加速,并行

 类里,kernel,可能会出问题

比如被编译成常量

 原理和这个一样的

 封装

 继承

 多态

 实际例子

averagePerson/Galaxy (gitee.com)

 总结

讲了俩

模板,加速 

太极类

 也可以改点其他的

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用turtle库可以绘制太极图形。以下是一个使用turtle库绘制太极图形的完整代码: ```python import turtle window = turtle.Screen() bage = turtle.Turtle() radius = 100 bage.width(3) bage.color("black", "black") bage.begin_fill() bage.circle(radius/2, 180) bage.circle(radius, 180) bage.left(180) bage.circle(-radius/2, 180) bage.end_fill() bage.left(90) bage.up() bage.forward(radius*0.35) bage.right(90) bage.down() bage.color("white", "white") bage.begin_fill() bage.circle(radius*0.15) bage.end_fill() bage.left(90) bage.up() bage.backward(radius*0.7) bage.down() bage.left(90) bage.color("black", "black") bage.begin_fill() bage.circle(radius*0.15) bage.end_fill() bage.right(90) bage.up() bage.backward(radius*0.65) bage.right(90) bage.down() bage.circle(radius, 180) bage.ht() window.exitonclick() ``` 这段代码使用turtle库创建了一个窗口,并创建了一个名为bage的海龟对象。通过调用海龟对象的方法和属性,可以绘制太极图形。首先设置海龟的宽度和颜色,然后使用`circle`方法绘制半圆和圆形来构建太极图形的两个部分。接着调整海龟的位置和方向,使用`circle`方法绘制两个小圆来表示太极图形的阴阳部分。最后隐藏海龟对象并等待用户点击窗口关闭。 运行这段代码,就可以在窗口中看到绘制的太极图形。 #### 引用[.reference_title] - *1* *2* [python绘图:turtle画太极图](https://blog.csdn.net/gouxf_0219/article/details/84396581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值