예제 #1
0
void Normal_Calc_z3(VECTOR Result, int N_Max, FRACTAL *)
{
  DBL
  n11 = 1.0, n12 = 0.0, n13 = 0.0, n14 = 0.0,
  n21 = 0.0, n22 = 1.0, n23 = 0.0, n24 = 0.0,
  n31 = 0.0, n32 = 0.0, n33 = 1.0, n34 = 0.0;

  DBL x, y, z, w;
  int i;
  DBL tmp, dtmp, dtmp2, x2, x3, x4;

  x = Sx[0];
  y = Sy[0];
  z = Sz[0];
  w = Sw[0];

  for (i = 1; i <= N_Max; i++)
  {
    tmp = y * y + z * z + w * w;

    x2 = x * x;
    x3 = x2 - tmp;
    x4 = 3.0 * x2 - tmp;

    Deriv_z3(n11, n12, n13, n14);
    Deriv_z3(n21, n22, n23, n24);
    Deriv_z3(n31, n32, n33, n34);

    x = Sx[i];
    y = Sy[i];
    z = Sz[i];
    w = Sw[i];
  }

  Result[X] = n11 * x + n12 * y + n13 * z + n14 * w;
  Result[Y] = n21 * x + n22 * y + n23 * z + n24 * w;
  Result[Z] = n31 * x + n32 * y + n33 * z + n34 * w;
}
예제 #2
0
void Z3FractalRules::CalcNormal(Vector3d& Result, int N_Max, const Fractal *, DBL **IterStack) const
{
    DBL
    n11 = 1.0, n12 = 0.0, n13 = 0.0, n14 = 0.0,
    n21 = 0.0, n22 = 1.0, n23 = 0.0, n24 = 0.0,
    n31 = 0.0, n32 = 0.0, n33 = 1.0, n34 = 0.0;

    DBL x, y, z, w;
    int i;
    DBL tmp, dtmp, dtmp2, x2, x3, x4;

    x = IterStack[X][0];
    y = IterStack[Y][0];
    z = IterStack[Z][0];
    w = IterStack[W][0];

    for (i = 1; i <= N_Max; i++)
    {
        tmp = y * y + z * z + w * w;

        x2 = x * x;
        x3 = x2 - tmp;
        x4 = 3.0 * x2 - tmp;

        Deriv_z3(n11, n12, n13, n14);
        Deriv_z3(n21, n22, n23, n24);
        Deriv_z3(n31, n32, n33, n34);

        x = IterStack[X][i];
        y = IterStack[Y][i];
        z = IterStack[Z][i];
        w = IterStack[W][i];
    }

    Result[X] = n11 * x + n12 * y + n13 * z + n14 * w;
    Result[Y] = n21 * x + n22 * y + n23 * z + n24 * w;
    Result[Z] = n31 * x + n32 * y + n33 * z + n34 * w;
}