Most Delta firmware uses a simplified kinematics calculation based on the Pythagorean theorem and the start & end points of each tool path segment. Here's a popular kinematics write-up:
Typical column Delta architecture with three parallelogram arms:

Kinematic simplification (removing static offsets & reducing parallelograms to simple arms):


The basics of delta kinematics are surprisingly simple. The effector sits at the intersection of the three arms. The arms are controlled by shifting their attachments to the columns (carriages) up and down. Move a carriage upward, and the effector will swing towards the corresponding column. Each point in space has a unique carriage position for each of the three columns. It's conceptually very straightforward, even if the math is a bit complex.
Most Delta firmwares (eg Marlin, Repetier) determine the effector location relative to each column and use the Pythagorean theorem to find the corresponding carriage height required. There are some square and square root operations. Repeat for all three columns and you have the desired carriage positions.

Once the start position and end positions of each carriage is known, the firmware simply linearly interpolates the carriage position to drive the motion. But driving the carriages at constant speed between start & end positions causes path error, because the intermediate carriage positions on the tool path are not linear between the start and end. The longer the segment, the more error at the middle of the path due to linear interpolation of the desired arc path. Specifically, executing long segments (such as travel moves) will dip the nozzle down towards the build plate in an arc. This is likely to cause nozzle/print collisions. So the firmware uses segmentation to improve intermediate path accuracy.

Segmentation works by splitting each segment into smaller sub-segments. Very short segments have little error. Typical firmware sets a segments-per-second value and subdivides anything longer than the preset value.
One significant result of this is that Deltas must do an enormous amount of math to execute even simple linear toolpaths. This places significant computational strain on older 16 bit processors. Various improvements to this exist, such as using integer math to speed calculations (Repetier) or upgrading to faster, more-capable 32 bit systems (Smoothie). But the fact remains that most Delta firmware uses an inefficient kludge for kinematics calculations.
I think I have a better option figured out. It's an exact inverse kinematics solution -- no interpolation -- that looks like it might be capable of executing faster than the simplified kinematics with segmentation. But I'm not an expert on the coding side of things. Input would be appreciated.
Let's look at the real (generalized) kinematics that Deltas use, rather than the simplified version. First, each arm defines a sphere of positions where the effector can be for any given carriage position. Or, more strictly, a segment of sphere with radius of the arm's length, and other dimensions based on joint constraints. The sphere of possible effector positions moves up and down with the associated carriage. Here's the sphere section for one carriage at one position:

This "sphere of freedom" is one constraint for the effector in 3d space, so one arm confines the effector to the two-dimensional surface of the sphere. Adding a second carriage & arm adds another sphere and further constrains the effector. The intersection of two spheres is a circle. So with two arms and carriages fixed in place, the effector must sit on a circular arc segment (one-dimensional curve).

Adding the third arm forces the effector to sit at the intersection of three spheres sections, which is a point. So the carriage positions (sphere centers) and rod lengths (sphere radii) uniquely define the effector location in space.

So far, this is exactly how the typical firmware kinematics work, but explained in a slightly different way. The sphere radius is the hypotenuse in the triangle calculation. So you can use the Pythagorean theorem to associate an effector location with a set of carriage positions. But what I want to add is the analytical solution for the motion curves between discrete points.
When the carriages move up and down, the associated spheres move up and down too. All Delta robot motion is produced by translations of the three spheres. Column Deltas use vertical translations. Clavel's Delta (rotary arm, usually used for pick-and-place) translates the spheres along circular arcs. Other Delta styles exist, and they all operate by translating spheres.
There is only one possible position for each carriage at each effector location. That means we can do the kinematics math for each arm/carriage separately, with no other interactions between them. So let's consider how a single carriage must move to produce a particular tool path in the effector. The simple version is, the effector must sit on the surface of the sphere. Which means the carriage must move up or down such that the sphere intersects with the tool path segment.
We can represent this relationship by taking the tool path segment, and projecting it along the Z axis into a vertical plane section. That plane section intersects the sphere to produce a circular arc segment. (Plane/sphere intersections produce circles.) The Z distance between the desired tool path and this intersection arc segment is how far the carriage must travel to produce the desired motion.

What this shows us is that producing a straight line effector motion requires the carriage to travel at a non-linear rate. The graph of carriage height with respect to time will be a circular arc, which is a mathematically tractable curve to produce via software. For example, the motion curve could be produced using some sort of sine function that I haven't derived yet. But what's really interesting is the possibility of adapting the Bresenham's circle algorithm (
http://en.wikipedia.org/wiki/Midpoint_circle_algorithm) to step out the circular arc with respect to time. That is a well-known and well-optimized function that can step through a circle shape without redoing the full kinematics calculation at every intermediate point.
Of course, the circular motion path is only valid for horizontal effector motion. To add in effector Z motion, we have to sum a linear motion with a circular motion. That should be a relatively straightforward modification to Bresenham's though. (Or the tool segment can be split into horizontal-circular and vertical-linear components which are run through Bresenham's separately.)
So, for each tool path segment, I'm thinking we would need to:
- Find the start and end carriage positions (same as simplified Delta kinematics)
- Project the end point down in Z to find the point on the sphere representing the final carriage position
- Find a third point on the virtual circle, eg project the segment midpoint down in Z
- Find the radius of the circle arc using the three points previously determined
- Plug the start/end points and circle radius into a modified Bresenham's circle algorithm to step out carriage motion with respect to time
- Repeat for other two carriages
It's quite a few extra math steps versus a single segment for typical Delta firmware, but I think the math steps should be similar or lower CPU cycle count. And segmentation is not required, so the square roots to determine carriage endpoints are not being repeated 100-200 times per second. That may allow significant processing speed increases on straight-line tool paths.