另外奇怪的一点是,我用另外一种算法建模出现这个问题的概率很小。对比两种方法没找到区别。希望大佬们帮我看一下。
/clear
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
XMAX=100
YMAX=100
ZMAX=100 !设定模型尺寸
RMIN=10
RMAX=10 !设定球形半径
/PREP7
NUM_TOTAL=100 !设定球个数
*DO,I,1,1000000
LOC_X=RAND(-XMAX/2,XMAX/2)
LOC_Y=RAND(-YMAX/2,YMAX/2)
LOC_Z=RAND(-ZMAX/2,ZMAX/2)
RADIUS=RAND(RMIN,RMAX)
!生成球体
WPOFFS,LOC_X,LOC_Y,LOC_Z
SPH4,0,0, RADIUS
*GET,VOLU_NUM,VOLU,0,COUNT
M= VOLU_NUM
WPROTA,30,
CSWPLA,11,1
CSYS,11
VGEN, ,M, , ,, 30, , , ,1
CSYS,0
WPCSYS,-1,0
!通过布尔运算判断球是否相交
*IF,M,GT,1,THEN
*DO,J,1,M-1
BOPTN,KEEP,1
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBV,J,M
*GET,VOLU_NUM,VOLU,0,COUNT
*IF,VOLU_NUM,GT,M,THEN
VDELE,M,M+1,1,1
NUMCMP,VOLU
*EXIT
*ENDIF
*ENDDO
*ENDIF
*GET,VOLU_NUM,VOLU,0,COUNT
M= VOLU_NUM
!判断数目如果达到一定数目停止循环
*IF,M,GT,NUM_TOTAL,THEN
*EXIT
*ENDIF
*ENDDO
BLOCK,-XMAX/2,XMAX/2,-YMAX/2,YMAX/2,-ZMAX/2,ZMAX/2,
/TRLCY,VOLU,0.5, M+1
/REPLOT
!!!!!!!!!!!!!!!!!!!!!截掉体外面一部分的填充物!!!!!!!!!!!!!!!!
WPOFFS,-XMAX/2
WPROTA,,,90
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
WPOFFS,XMAX/2
WPROTA,,,90
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
WPOFFS,,YMAX/2
WPROTA,,90,
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
WPOFFS,,-YMAX/2
WPROTA,,90,
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
WPOFFS,,,ZMAX/2
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
WPOFFS,,,-ZMAX/2
BOPTN,KEEP,0 !不保留原体
BOPTN,NWARN,1
BOPTN,VERS,RV52
BTOL,1e-005,
VSBW,ALL
CSYS,0
WPCSYS,-1,0
!反选删掉四周的体
VSEL,U,LOC,X,-XMAX/2,XMAX/2
VDELE,ALL,,,1
ALLS
VSEL,U,LOC,Y,-YMAX/2,YMAX/2
VDELE,ALL,,,1
ALLS
VSEL,U,LOC,Z,-ZMAX/2,ZMAX/2
VDELE,ALL,,,1
ALLS
VPLOT
NUMCMP,VOLU
NUMCMP,KP
NUMCMP,LINE
NUMCMP,AREA
这是第一种出现错误较少的方法 |