| Page 1 | Page 2 |
|
|
A '3D cartoon' engine that manipulates curves symbolically to project them in perspective.
This means that the 2D outline of a 3D curved surface is calculated as a curve.
Only after this stage are numeric methods employed, so the curves are rendered as closely as a pixelated screen will allow.
Shown here, a cylinder, a cone and a sphere, all 2nd order surfaces. The sphere is an 'inflated' buckyball (or truncated icosahedron), with hexagons shaded to look like a football.
I am currently implementing a generalisation that I have found for this type of surface, whose general form is
a.x2 + b.y2 + c.z2 + d.xy + e.yz + f.zx + g.x + h.y + i.z + j = 0
2nd order surfaces include spheroids, (including prolate, oblate and irregular), paraboloids, hyperboloids and prisms of any conic section, (including degenerates). I am convinced, and am currently attempting to prove, that a similar solution exists for surfaces up to the 4th order. The torus, for instance, is a 4th order surface. This is a rich set of geometric primitives for a 3D artist to draw on. The 'cartoon outlines' of a limitless variety of parametric surfaces are also amenable to symbolic calculation.
Primarily, this is a program for evaluating chess positions without thinking any moves ahead the way a full opponent would have to, in order to play a sensible game. Getting as much useful information from the board position as possible, without the ability to plan ahead, is a challenge that I hope will pay off when it is finally combined, in a computer opponent, with that ability.
So far, (a few days after I began writing it, March 2011), it allows a full two-player game of chess by standard rules, and it displays a wealth of information on the board itself about threats, guards and shadowed threats, from a particular piece or on a particular square.
Not subject to change: On your turn, clicking on your own piece will show all the threats and guards by that particular piece, including its legal moves in green. Clicking on a green square moves the piece.
Subject to change: Clicking on a piece shows the threats by that piece on other squares, including legal moves in green. On that side's turn, clicking a green square will make the move. Clicking on an empty square, or clicking a second time on a piece, will show pieces threatening that square. Clicking again clears the highlighted squares. I am in the process of adding extra explanation of the interface, in the program itself.
There is a great deal of information yet to added to the board regarding, for instance, vulnerability to forked threats, or information that could be useful for critical move-counting, as is often used in endgames. I may continue to add information indefinitely, if it occurs to me that something is useful for a computer to know, or for a human to have a visual aid to.
This investigation of highly symmetrical cylinder intersections is motivated by a desire for developable approximations of a sphere. (A developable surface has a flat net.)
One application is extremely low distortion map projections, in the spirit of Richard Buckminster-Fuller's dymaxion map. A disadvantage is a high number of discontinuities thanks to the sinusoidal edges of the nets. However these gaps do remain thinner and are considerably less numerous than those found in a similar construction with dihedral symmetry or anti-symmetry. (This is the symmetry of a uniform prism or anti-prism). Such a construction is demonstrated by some interrupted sinusoidal projections, normally by a uniform distribution of cylinders, perpendicular to the Earth's rotational axis.
The reverse application is a very practical way to create a globe using a standard printer, at least for the simpler nets with fewer gaps.
Features in development include: Bitmap distortion; printable nets including Catalan solid versions, with some user control over layout; various net animations, including rolling/folding and unrolling/unfolding of the solids.
Future investigations may explore: The remaining symmetry groups on a sphere; various other compromises on map distortion, in addition to the options of a rounded solid or Catalan solid; the use of cones instead of cylinders.
Originally written in QuickBASIC on Windows, and Zed for the TI85 calculator, I ported my virtual Rubik's Cube as a learning exercise when I needed to use Java. (This was my introduction to object orientation.)
Move the mouse over the cube (and click once if you are using IE) and it will automatically scramble.
Hover over a square. If Java is supported by your browser, arrows appear to indicate which ways a slice can be moved. Click once to start turning. Click again to drop it in the nearest lined up position.
Click, hold and drag to turn the cube. It is easiest to manipulate if you keep the pointer away from the centre of the cube.