def mainImage(iMouse: ti.Vector, iTime: ti.f32, i: ti.i32, j: ti.i32) -> ti.Vector: fragCoord = ti.Vector([i, j]) p = -1.0 + 2.0 * fragCoord / iResolution m = -1.0 + 2.0 * iMouse # iMouse 已经归一化 a1 = ti.atan2(p[1] - m[1], p[0] - m[0]) a2 = ti.atan2(p[1] + m[1], p[0] + m[0]) r1 = ti.sqrt((p - m).dot(p - m)) r2 = ti.sqrt((p + m).dot(p + m)) uv = ti.Vector( [0.2 * iTime + (r1 - r2) * 0.25, ti.asin(ti.sin(a1 - a2)) / 3.1416]) w = ti.exp(-15.0 * r1 * r1) + ti.exp(-15.0 * r2 * r2) w += 0.25 * smoothstep(0.93, 1.0, ti.sin(128.0 * uv[0])) w += 0.25 * smoothstep(0.93, 1.0, ti.sin(128.0 * uv[1])) # 可以使用纹理 # vec3 col = texture( iChannel0, 0.125*uv ).zyx; col = ti.Vector([0.0, 0.0, 0.0]) fragColor = col + w return fragColor
def func(): xi[0] = -yi[None] xi[1] = ~yi[None] xi[2] = ti.logical_not(yi[None]) xi[3] = ti.abs(yi[None]) xf[0] = -yf[None] xf[1] = ti.abs(yf[None]) xf[2] = ti.sqrt(yf[None]) xf[3] = ti.sin(yf[None]) xf[4] = ti.cos(yf[None]) xf[5] = ti.tan(yf[None]) xf[6] = ti.asin(yf[None]) xf[7] = ti.acos(yf[None]) xf[8] = ti.tanh(yf[None]) xf[9] = ti.floor(yf[None]) xf[10] = ti.ceil(yf[None]) xf[11] = ti.exp(yf[None]) xf[12] = ti.log(yf[None])
def test_trigonometric(): grad_test(lambda x: ti.tanh(x), lambda x: np.tanh(x)) grad_test(lambda x: ti.sin(x), lambda x: np.sin(x)) grad_test(lambda x: ti.cos(x), lambda x: np.cos(x)) grad_test(lambda x: ti.acos(x), lambda x: np.arccos(x)) grad_test(lambda x: ti.asin(x), lambda x: np.arcsin(x))
lambda x: 0.4 * x * x - 3, lambda x: (x - 3) * (x - 1), lambda x: (x - 3) * (x - 1) + x * x, ]) @if_has_autograd @test_utils.test() def test_poly(tifunc): grad_test(tifunc) @pytest.mark.parametrize('tifunc,npfunc', [ (lambda x: ti.tanh(x), lambda x: np.tanh(x)), (lambda x: ti.sin(x), lambda x: np.sin(x)), (lambda x: ti.cos(x), lambda x: np.cos(x)), (lambda x: ti.acos(x), lambda x: np.arccos(x)), (lambda x: ti.asin(x), lambda x: np.arcsin(x)), ]) @if_has_autograd @test_utils.test(exclude=[ti.vulkan]) def test_trigonometric(tifunc, npfunc): grad_test(tifunc, npfunc) @pytest.mark.parametrize('tifunc', [ lambda x: 1 / x, lambda x: (x + 1) / (x - 1), lambda x: (x + 1) * (x + 2) / ((x - 1) * (x + 3)), ]) @if_has_autograd @test_utils.test() def test_frac(tifunc):
def initialize(): for i, j in grid_g: grid_g[i, j] = [0, (n_grid - j) / n_grid * 100] center = [0.5, 0.5] r1 = radius(1000) r0 = r1 * 1.2 print(r1) for i in range(n_particles): #x[i] = [ti.random() * 0.2 + 0.3 + 0.10 * (i // group_size), ti.random() * 0.2 + 0.05 + 0.32 * (i // group_size)] #material[i] = i // group_size # 0: fluid 1: jelly 2: snow x[i] = [ ti.random() * r0 * 2 + center[0] - r0, ti.random() * r0 * 2 + center[1] - r0 ] r_i = x[i] - center r_in = r_i.norm() theta_i = ti.asin(r_i[1] / r_in) theta_1 = 0.0 theta_2 = 0.0 if r_in <= r1: if theta_i >= 0: if r_i[0] * r_i[1] >= 0: theta_1 = theta_i + np.pi else: theta_1 = 2 * np.pi - theta_i else: if r_i[0] * r_i[1] >= 0: theta_1 = -theta_i else: theta_1 = np.pi + theta_i if theta_i >= 0: if r_i[0] * r_i[1] >= 0: theta_2 = theta_i else: theta_2 = np.pi - theta_i else: if r_i[0] * r_i[1] >= 0: theta_2 = np.pi - theta_i else: theta_2 = 2 * np.pi + theta_i r11 = radius(theta_1) r22 = radius(theta_2) flag = 0 if r11 > r22: flag = 1 for j in range(5): if flag == 0: rr = radius(theta_1) if r_in <= rr: break else: flag = 1 theta_1 = theta_1 + 2 * np.pi else: rr = radius(theta_2) if r_in <= rr: break else: flag = 0 theta_2 = theta_2 + 2 * np.pi material[i] = flag v[i] = ti.Matrix([0, 0]) F[i] = ti.Matrix([[1, 0], [0, 1]]) Jp[i] = 1