a couple thoughts.

## Effect of Anchor height offset

using the pythagorean theorem for the belt lengths we have

slope_distance^2 = Z_offset^2 + diagonal_distance^2

or diagonal_distance = sqrt ( slope_distance^2 - Z_offset^2)

(this is in the current calibration as 'project belts onto workpiece surface)

At the corner of the workpiece with a 8x10 frame, a 10mm error in the Z offset translates into a 1mm error in the diagonal_distance

about a foot further in, this is reduced to a .4mm error

In the center, this is reduced to .25mm error

at the far corner, this is reduced to .14mm error

so I think it will make a difference (a few mm of position) if you are calibrating on just the floor (concrete anchors) vs on a 3/4 wasteboard + 3/4 workpiece (~40mm of difference in Z height)

## Finding center

We should be able to find the center (by what I think is a reasonable definition of center) by making opposite belts equal length. This cannot be done in a single step, we don’t have enough information about where we start. But if we adjust one pair, then the other, we move closer to the center. Repeat a few times and we should end up very close to the center. I’m not sure how many cycles we would need to get to if we start out in a very odd position, but since the ‘extend belts’ step should be getting us fairly close to start with (as the belts start out the same length before they are attached to the anchors) we should be able to retract opposite corners at the same speed to quickly get to the center

At this point we can call the position of the sled 0,0 and know two circles that each have two anchors on them, one the radius of the top left belt +offset (for the tl/br anchors, call this D1) and once the radius of the top right bel + offset (for the tr/bl anchors, call this D2)

This gives us formulas for the anchor locations of:

tl.x = -1 *sqrt(D1^2 - tl.y^2) or tl.y = sqrt(D1^2 - tl.x^2) (note tl.x is negative)

br.x = sqrt(D1^2 - br.y^2) or br.y = -1 *sqrt(D1^2 - br.x^2) (note br.y is negative)

bl.x = -1 * sqrt(D2^2 - bl.y^2) or bl.y = -1 *sqrt(D2^2 - bl.x^2) (note both bl.x and bl.y are negative)

tr.x = sqrt(D2^2 - tr.y^2) or tr.y = sqrt(D2^2 - tr.x^2)

(4 formulas, 8 unknowns)

If we knew the anchors formed a rectangle, we could also say

tl.x = - br.x

tl.y = - br.y

bl.x = - tr.x

bl.y = - tr.y

but we normally can’t

## Next step, move up/right along a line perpendicular to the line from tl/br anchors

If we then feed out some slack to tl and br slowly for a short distance (to a new length D3), while tightening tr (to a new length D4) and feeding out bl at the same speed we tighten tr (to a new length D5) we can keep tl and br the same length (for a perfect ‘standard frame’ feeding out ~2.5mm would let the other two belts move ~100mm if I’m doing the math right)

This gives us some new formulas for the anchor locations of:

D4 = D2 - sqrt(x.1^2 + y.1^2) (edit) NOT TRUE, the ‘center point’ may not be on the diagonals between corners

D5 = D2 + sqrt(x.1^2 + y.1^2) (edit) NOT TRUE, the ‘center point’ may not be on the diagonals between corners

tl.x + x.1) = -1 * sqrt(D3^2 - (tl.y-y.1)^2)

br.x - x.1 = sqrt(D3^2 - (-br.y + y.1)^2)

tr.x - x.1 = sqrt(D4^2 - (tr.y - y.1)^2)

bl.x + x.1 = -1 * sqrt(D5^2 - (-bl.y + y.1)^2)

(adding 6 more formulas, but only 2 more unknowns) edit 4 formulas with 2 more unknowns

also, we know that the line 0,0 → x1,y1 is a right angle to the diagonal between the tl and br anchors.

## next step move up/left from center along a line perpendicular to the line from tr/bl anchors

similarly, you could go back to the center and hold the tr and bl belts the same (D6, slightly longer than D2) and move to the top left (D7 to top left, D8 to bottom right) to get two more points that you know are on a line perpendicular to the tr/bb diagonal

(note x.2 is negative)

D7 = D1 - sqrt(x.2^2 + y.2^2) (edit) NOT TRUE, the ‘center point’ may not be on the diagonals between corners

D8 = D1 + sqrt(x.2^2 + y.2^2) (edit) NOT TRUE, the ‘center point’ may not be on the diagonals between corners

tl.x + x.2 = -1 * sqrt(D6^2 - (tl.y - y.2)^2)

br.x - x.2 = sqrt(D6^2 - (-br.y +y.2)^2)

tr.x - x.2 = sqrt(D7^2 - (tr.y - y.2)^2)

bl.x + x.2 = -1 * sqrt(D8^2 - (-bl.y + y.2)^2)

I think that gives enough formulas with few enough unknowns to be solvable

the further the two points are from the center, the better.

Besides the formulas above, we also have now plotted out two triangles that we know the lengths of all 3 sides (D1 - D7, D1, D6)

I don’t know if it is worth it to go back to the center and do a similar movement to the bottom quadrants. If the frame is a rectangle, it clearly isn’t, but I’m not sure when the frame is an irregular trapezoid. Establishing two more triangles may be what’s needed to get the angles/positions of the other two anchors.

But it’s now 2am, so I’m not going to try and plot out sample measurements and try to plug them into a solver tonight (especially since I would have to learn how to run the solver as part of it)

Can someone else with a more up-to-date math background check that I haven’t made any stupid mistakes.

note, edited to fix some of the formulas.