For each square, define X
and Y
variables that denote the upper left corner.
These variable will have domains 1..10-L
, where L
is the length of the square. If you set the domain to 1..10
, the squares may be placed partly outside your 10×10 rectangle.
Then you can post constraints for each pair of rectangles (X,Y)
and (X1,Y1)
that state that if they overlap on the x axis, they must not overlap on the y axis, and vice versa:
(((X #=< X1) and (X+L #> X1)) => ((Y+L #=< Y1) or (Y1+L1 #=< Y))),
(((X1 #=< X) and (X1+L1 #> X)) => ((Y+L #=< Y1) or (Y1+L1 #=< Y))),
(((Y #=< Y1) and (Y+L #> Y1)) => ((X+L #=< X1) or (X1+L1 #=< X))),
(((Y1 #=< Y) and (Y1+L1 #> Y)) => ((X+L #=< X1) or (X1+L1 #=< X)))
(your particular constraint syntax may vary)