偏移坐标
- Taichi场可以用偏移坐标来定义。 该偏移会移动场的边界,因此原点不再是0向量。 一个典型的用法是在物理模拟中支持具有负坐标的体素。
- 例如,一个含
32x64
个元素的矩阵,坐标偏移(-16, 8)
可以定义为:
a = ti.Matrix.field(2, 2, dtype=ti.f32, shape=(32, 64), offset=(-16, 8))
这样,field 的索引范围即从 (-16, 8)
到 (16, 72)
(两边不包括)。
a[-16, 8] # 左下角
a[16, 8] # 右下角
a[-16, 72] # 左上角
a[16, 72] # 右上角
note
场形状的维度数应该与偏移量的维度数保持一致 。 否则,将抛出 AssertionError
异常。
a = ti.Matrix.field(2, 3, dtype=ti.f32, shape=(32,), offset=(-16, )) # 正确!
b = ti.Vector.field(3, dtype=ti.f32, shape=(16, 32, 64), offset=(7, 3, -4)) # 正确!
# c = ti.Matrix.field(2, 1, dtype=ti.f32, shape=None, offset=(32,)) # AssertionError
# d = ti.Matrix.field(3, 2, dtype=ti.f32, shape=(32, 32), offset=(-16, )) # AssertionError
e = ti.field(dtype=ti.i32, shape=16, offset=-16) # Works!
# f = ti.field(dtype=ti.i32, shape=None, offset=-16) # AssertionError
# g = ti.field(dtype=ti.i32, shape=(16, 32), offset=-16) # AssertionError