Пример #1
0
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
Пример #2
0
 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])
Пример #3
0
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))
Пример #4
0
    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):
Пример #5
0
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