I would just place them grid based and giving them a randomized Offset on X and Z ( an Offset which makes it impossible that they collide given their grid positions ), making it look more natural.
However here is the code without the logic error I mentioned, still inefficient:
For o=54 to 62
x=1698+rnd(6302)
z=1612+rnd(2720)
Clone object o,99
Position object o,x,-25,z
Scale object o,1000+rnd(250),1000+rnd(250),1250
Yrotate object o,rnd(359)
Set object collision to polygons o
Verify_Collision_Plant3:
range=o-54
FOR ocheck = 54 to 54+range
IF ocheck<o||ocheck>o rem not the same object?
If object hit(o , ocheck)=1
x=1698+rnd(6302)
z=1612+rnd(2720)
Position object o,x,-25,z
Goto Verify_Collision_Plant3
Endif
ENDIF
NEXT ocheck
Next o
I havent used object hit in years, so I don´t know if it gives you the responce you want, I would just check that the object is not in a rectangular ( or circular ) area, which is defined by another plant object.
Which is a secure way and also it takes less Performance than a poly based dbpro collision.