Filter:   InfoImg
download i_figureeight.cc
Language: C++
LOC: 31
Project Info
X11
Server: OpenBSD
Type: cvs
...ograms\xlockmore\modes\glx\
   atlantis.c
   atlantis.h
   b_draw.c
   b_lockglue.c
   b_sphere.c
   bubble3d.c
   bubble3d.h
   buildlwo.c
   buildlwo.h
   cage.c
   dolphin.c
   e_textures.h
   gears.c
   i_evert.h
   i_figureeight.cc
   i_figureeight.h
   i_linkage.cc
   i_linkage.h
   i_sphere.cc
   i_sphere.h
   i_spline.cc
   i_spline.h
   i_threejet.cc
   i_threejet.h
   i_threejetvec.cc
   i_threejetvec.h
   i_twojet.cc
   i_twojet.h
   i_twojetvec.cc
   i_twojetvec.h
   invert.c
   lament.c
   Makefile.in
   moebius.c
   morph3d.c
   pipeobjs.c
   pipes.c
   rubik.c
   s1_1.c
   s1_2.c
   s1_3.c
   s1_4.c
   s1_5.c
   s1_6.c
   s1_b.c
   shark.c
   sproingies.c
   sproingiewrap.c
   stairs.c
   superquadrics.c
   swim.c
   text3d.cc
   text3d.h
   whale.c

#include "i_figureeight.h"

extern int n_strips;

TwoJetVec FigureEight(
  TwoJetVec w, TwoJetVec h, TwoJetVec bend, TwoJet form, TwoJet v
) {
  TwoJet height;
  v %= 1;
  height = (Cos (v*2) + -1) * (-1);
  if (v > 0.25 && v < 0.75)
    height = height*-1 + 4;
  height = height*0.6;
  h = h + bend*(height*height*(1/64.));
  return
    w*Sin (v*2) + (h) * (Interpolate((Cos (v) + -1) * (-2), height, form))
  ;
}

TwoJetVec AddFigureEight(ThreeJetVec p, ThreeJet u, TwoJet v, ThreeJet form, ThreeJet scale)
{
  ThreeJet size = form*scale;
  form = form*2 + form*form*-1;
  TwoJetVec dv = AnnihilateVec(D(p, 1), 1);
  p = AnnihilateVec(p, 1);
  TwoJetVec du = Normalize(D(p, 0));
  TwoJetVec h = Normalize(Cross(du, dv))*TwoJet(size);
  TwoJetVec w = Normalize(Cross(h, du))*(TwoJet(size)*1.1);
  return RotateZ(
    TwoJetVec(p) +
      FigureEight(w, h, du*D(size, 0)*(D(u, 0)^(-1)), form, v),
    v*(1./n_strips)
  );
}