The "Finding a reasonable home position"-part turns out to be really easy. I will explain it in the 2d-case first, to avoid unnecessary typing.
The only thing we control in this system, is the length of the three wires. Every possible combination of wire-lengths, (l0, l1, l2), corresponds to a unique point in the avilable print area (a triangle). To map a point (x', y') to the corresponding wire-lengths, all we have to do is place the wires anchor-points in the cartesian coordinate system, and compute the lengths from each anchor point to the point (x', y'). Like this:
When we get 4 anchor points, we get a tetrahedron shaped print volume instead of a triangular print area. The computational work is still only 3 subtractions, 3 squares, 2 additions and 1 square root per wire. I don't expect the atmega to have any troubles with that.
This way of mapping (x',y',z') to (l0, l1, l2, l3) imposes no constraints on where to put anchor points or home position, which is really nice. Keeping anchor point coordinates (xa0, ya0, za0), (xa1, ya1, za1), (xa2, ya2, za2) and (xa3, ya3, za3) stored away somewhere will (hopefully) be all the configuration the user will have to do. I guess getting the 3d coordinates of the anchor point in the ceiling won't be trivial to the user, but it shouldn't be horribly impossible either.
The only thing we control in this system, is the length of the three wires. Every possible combination of wire-lengths, (l0, l1, l2), corresponds to a unique point in the avilable print area (a triangle). To map a point (x', y') to the corresponding wire-lengths, all we have to do is place the wires anchor-points in the cartesian coordinate system, and compute the lengths from each anchor point to the point (x', y'). Like this:
When we get 4 anchor points, we get a tetrahedron shaped print volume instead of a triangular print area. The computational work is still only 3 subtractions, 3 squares, 2 additions and 1 square root per wire. I don't expect the atmega to have any troubles with that.
This way of mapping (x',y',z') to (l0, l1, l2, l3) imposes no constraints on where to put anchor points or home position, which is really nice. Keeping anchor point coordinates (xa0, ya0, za0), (xa1, ya1, za1), (xa2, ya2, za2) and (xa3, ya3, za3) stored away somewhere will (hopefully) be all the configuration the user will have to do. I guess getting the 3d coordinates of the anchor point in the ceiling won't be trivial to the user, but it shouldn't be horribly impossible either.