注意:顺时针旋转是朝x轴的上半轴旋转(即角度大于0),逆时针旋转是朝x轴的下半轴旋转(即角度小于0)
smallest_rectangle2 (BodyConnectedRegions2, BodyRow, BodyColumn, Phi1, BodyLength1, BodyLength2)
* BodyLength1:=100
* BodyLength2:=30
tuple_deg (Phi1, angle)
angle:=angle-0
radian := rad(0+angle)
gen_rectangle2_contour_xld (BodyRectangle2, BodyRow, BodyColumn, Phi1, BodyLength1, BodyLength2)
gen_rectangle2_contour_xld (BodyRectangle3, BodyRow, BodyColumn, radian, BodyLength1, BodyLength2)
**矩形四个坐标点位置
tuple_cos (radian, Cos)
tuple_sin (radian, Sin)
dev_set_color('green')
**判断顺时针还是逆时针旋转(顺时针角度为正,逆时针角度为负)
if (radian>=0)
**phi的角度(angle)和边长有关:长的一边为phi的箭头方向(angle在正90度到负90度之间),然后在与x轴形成角度
**以phi的角度为正方向,判断点在什么方向(左下左上右上右下)
if (angle>=45 and angle<=90)
**下面的左下左上右上右下坐标点:以箭头方向来判断(箭头方向(正90度到负90度之间)与X轴的角度)
LD_X := -BodyLength1*Cos - BodyLength2*Sin
LD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
LU_X := BodyLength1*Cos - BodyLength2*Sin
LU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos + BodyLength2*Sin
RU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := -BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+RD_Y, BodyColumn+RD_X, 6, radian)
elseif (angle<45 and angle>=0)
LU_X := -BodyLength1*Cos - BodyLength2*Sin
LU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := -BodyLength1*Cos + BodyLength2*Sin
LD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
endif
else
if (angle>=-45 and angle<0)
LU_X := -BodyLength1*Cos - BodyLength2*Sin
LU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := -BodyLength1*Cos + BodyLength2*Sin
LD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
elseif (angle<-45 and angle>-90)
RU_X := -BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos - BodyLength2*Sin
RD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := BodyLength1*Cos + BodyLength2*Sin
LD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-LD_Y, BodyColumn+LD_X, 6, radian)
LU_X := -BodyLength1*Cos + BodyLength2*Sin
LU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
endif
* LU_X := -BodyLength1*Cos - BodyLength2*Sin
* LU_Y := BodyLength1*Sin - BodyLength2*Cos
* gen_cross_contour_xld(Cross, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
* RU_X := BodyLength1*Cos - BodyLength2*Sin
* RU_Y := BodyLength1*Sin + BodyLength2*Cos
* gen_cross_contour_xld(Cross1, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
* RD_X := BodyLength1*Cos + BodyLength2*Sin
* RD_Y := BodyLength1*Sin - BodyLength2*Cos
* gen_cross_contour_xld(Cross2, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
* LD_X := -BodyLength1*Cos + BodyLength2*Sin
* LD_Y := BodyLength1*Sin + BodyLength2*Cos
* gen_cross_contour_xld(Cross3, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
endif
dev_display (Image)
dev_display (BodyRectangle2)
dev_display (BodyRectangle3)
dev_display (Cross)
dev_display (Cross1)
dev_display (Cross2)
dev_display (Cross3)
stop()
value:=-0
change:=-20
for value := 1 to change by -1
if (radian>=0)
if (angle>=45 and angle<=90)
LD_X := -BodyLength1*Cos - (BodyLength2+value)*Sin
LD_Y := BodyLength1*Sin - (BodyLength2+value)*Cos
gen_cross_contour_xld(Cross, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
LU_X := BodyLength1*Cos - (BodyLength2+value)*Sin
LU_Y := BodyLength1*Sin + (BodyLength2+value)*Cos
gen_cross_contour_xld(Cross1, BodyRow-LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos + BodyLength2*Sin
RU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := -BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+RD_Y, BodyColumn+RD_X, 6, radian)
gen_region_line (LeftHeight1, BodyRow-LU_Y, BodyColumn+LU_X, BodyRow+LD_Y, BodyColumn+LD_X)
gen_region_line (DownWidth1, BodyRow+LD_Y, BodyColumn+LD_X, BodyRow+RD_Y, BodyColumn+RD_X)
gen_region_line (UpWidth1, BodyRow-LU_Y, BodyColumn+LU_X, BodyRow-RU_Y, BodyColumn+RU_X)
gen_region_line (RightHeight1, BodyRow-RU_Y, BodyColumn+RU_X, BodyRow+RD_Y, BodyColumn+RD_X)
dev_display (Image)
dev_display (LeftHeight1)
dev_display (DownWidth1)
dev_display (UpWidth1)
dev_display (RightHeight1)
dev_display (Cross)
dev_display (Cross1)
dev_display (Cross2)
dev_display (Cross3)
elseif (angle<45 and angle>=0)
LU_X := -(BodyLength1+value)*Cos - BodyLength2*Sin
LU_Y := (BodyLength1+value)*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := -(BodyLength1+value)*Cos + BodyLength2*Sin
LD_Y := (BodyLength1+value)*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
gen_region_line (LeftHeight1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow+LD_Y, BodyColumn+LD_X)
gen_region_line (DownWidth1, BodyRow+LD_Y, BodyColumn+LD_X, BodyRow-RD_Y, BodyColumn+RD_X)
gen_region_line (UpWidth1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow-RU_Y, BodyColumn+RU_X)
gen_region_line (RightHeight1, BodyRow-RU_Y, BodyColumn+RU_X, BodyRow-RD_Y, BodyColumn+RD_X)
dev_display (Image)
dev_display (LeftHeight1)
dev_display (DownWidth1)
dev_display (UpWidth1)
dev_display (RightHeight1)
dev_display (Cross)
dev_display (Cross1)
dev_display (Cross2)
dev_display (Cross3)
endif
else
if (angle>=-45 and angle<0)
LU_X := -(BodyLength1+value)*Cos - BodyLength2*Sin
LU_Y := (BodyLength1+value)*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
RU_X := BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos + BodyLength2*Sin
RD_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross2, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := -(BodyLength1+value)*Cos + BodyLength2*Sin
LD_Y := (BodyLength1+value)*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross3, BodyRow+LD_Y, BodyColumn+LD_X, 6, radian)
gen_region_line (LeftHeight1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow+LD_Y, BodyColumn+LD_X)
gen_region_line (DownWidth1, BodyRow+LD_Y, BodyColumn+LD_X, BodyRow-RD_Y, BodyColumn+RD_X)
gen_region_line (UpWidth1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow-RU_Y, BodyColumn+RU_X)
gen_region_line (RightHeight1, BodyRow-RU_Y, BodyColumn+RU_X, BodyRow-RD_Y, BodyColumn+RD_X)
dev_display (Image)
dev_display (LeftHeight1)
dev_display (DownWidth1)
dev_display (UpWidth1)
dev_display (RightHeight1)
dev_display (Cross)
dev_display (Cross1)
dev_display (Cross2)
dev_display (Cross3)
elseif (angle<-45 and angle>=-90)
RU_X := -BodyLength1*Cos - BodyLength2*Sin
RU_Y := BodyLength1*Sin - BodyLength2*Cos
gen_cross_contour_xld(Cross, BodyRow+RU_Y, BodyColumn+RU_X, 6, radian)
RD_X := BodyLength1*Cos - BodyLength2*Sin
RD_Y := BodyLength1*Sin + BodyLength2*Cos
gen_cross_contour_xld(Cross1, BodyRow-RD_Y, BodyColumn+RD_X, 6, radian)
LD_X := BodyLength1*Cos + (BodyLength2+value)*Sin
LD_Y := BodyLength1*Sin - (BodyLength2+value)*Cos
gen_cross_contour_xld(Cross2, BodyRow-LD_Y, BodyColumn+LD_X, 6, radian)
LU_X := -BodyLength1*Cos + (BodyLength2+value)*Sin
LU_Y := BodyLength1*Sin + (BodyLength2+value)*Cos
gen_cross_contour_xld(Cross3, BodyRow+LU_Y, BodyColumn+LU_X, 6, radian)
gen_region_line (LeftHeight1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow-LD_Y, BodyColumn+LD_X)
gen_region_line (DownWidth1, BodyRow-LD_Y, BodyColumn+LD_X, BodyRow-RD_Y, BodyColumn+RD_X)
gen_region_line (UpWidth1, BodyRow+LU_Y, BodyColumn+LU_X, BodyRow+RU_Y, BodyColumn+RU_X)
gen_region_line (RightHeight1, BodyRow+RU_Y, BodyColumn+RU_X, BodyRow-RD_Y, BodyColumn+RD_X)
dev_display (Image)
dev_display (LeftHeight1)
dev_display (DownWidth1)
dev_display (UpWidth1)
dev_display (RightHeight1)
dev_display (Cross)
dev_display (Cross1)
dev_display (Cross2)
dev_display (Cross3)
endif
endif
endfor
stop()