请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

黑道公子3 物理模拟引擎 Taichi编程语言 小人喻于利

[复制链接]
查看: 110|回复: 0

1万

主题

1万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
43683
发表于 2020-1-15 14:32 | 显示全部楼层 |阅读模式
这是写在帖子头部的内容在动画电影里面一样平常城市有连续介质,比如雪的模拟。这里有仅必要99行代码便可以写一个简单的连续介质模拟器。我经过一个很底子的分形例子来先容下Taichi编程说话。


物理模拟引擎 Taichi编程语言  经济新闻




首先按照你自己的硬件及OS来安装Taichi,用pip命令。
可以利用以下命令:
# Python 3.6+ needed
# CPU only. No GPU/CUDA needed. (Linux, OS X and Windows)
python3 -m pip install taichi-nightly
# With GPU (CUDA 10.0) support (Linux only)
python3 -m pip install taichi-nightly-cuda-10-0
# With GPU (CUDA 10.1) support (Linux only)
python3 -m pip install taichi-nightly-cuda-10-1
现在可预备运转以下的Taichi的代码了,为了盘算Julia set。
python3 fractal.py
fractal.py的代码以下;
import taichi as ti
ti.cfg.arch = ti.cuda # Run on GPU by default
n = 320
pixels = ti.var(dt=ti.f32, shape=(n * 2, n))
@ti.func
def complex_sqr(z):
return ti.Vector([z[0] * z[0] - z[1] * z[1], z[1] * z[0] * 2])
@ti.kernel
def paint(t: ti.f32):
for i, j in pixels: # Parallized over all pixels
c = ti.Vector([-0.8, ti.sin(t) * 0.2])
z = ti.Vector([float(i) / n - 1, float(j) / n - 0.5]) * 2
iterations = 0
while z.norm() < 20 and iterations < 50:
z = complex_sqr(z) + c
iterations += 1
pixels[i, j] = 1 - iterations * 0.02
gui = ti.GUI("Fractal", (n * 2, n))
for i in range(1000000):
paint(i * 0.03)
gui.set_image(pixels)
gui.show()
接下来表白下代码。
1、导入taichi包
import taichi as ti
taichi是python中的一个嵌入式DSL,它供给了一个表白性的python包。
这意味着为python步伐员供给了编写taichi说话的大要性,仅泯灭很少的进修价格。
2、可移植性
taichi既支持cpu又支持NVIDIA GPU。假如呆板没有CUDA的支持,taichi将退回到cpu支持。
# Run on GPU
ti.cfg.arch = ti.cuda
# Run on CPU
ti.cfg.arch = ti.x86_64
3、张量
taichi是面向数据的编程说话。
pixels = ti.var(dt=ti.f32, shape=(n * 2, n))
表示分派了2D张量,命名为pixels ,典范是ti.f32,size是(n * 2, n),如(640, 320)。
4、函数(Functions)及焦点(kernels)
现实的盘算重要在taichi的kernels及第行。Kernel参数是hinted典范,编写的函数看起来类似
python。
你也可以用ti.func界说taichi函数,能被kernels挪用。
5、并行for-loops
在taichi kernel的for-loop,是自动并行处置赏罚的。以下形式。
@ti.kernel
def fill():
for i in range(10): # parallelized
x += i
s = 0
for j in range(5): # serialized in each parallel thread
s += j
y = s
6、与python的集成
在python范围内,可以用简单标引语法来拜候Taichi张量。形式以下。
image[42, 11] = 0.7
print(image[1, 63])
import numpy as np
pixels.from_numpy(np.random.rand(n * 2, n))
import matplotlib.pyplot as plt
plt.imshow(pixels.to_numpy())
plt.show()


物理模拟引擎 Taichi编程语言  经济新闻



免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
感激您的阅读
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表