已知三角纸片三边长为x,y,x
小四边形长和宽为m,n按45度角度切纸,请问最多能切出多少小四方形?
图片
topic.csdn.net/u/20070702/10/4f3be2c1-8dc0-4c68-947f-7af288e72e27.html?seed=363033226
小四边形长和宽为m,n按45度角度切纸,请问最多能切出多少小四方形?
图片
topic.csdn.net/u/20070702/10/4f3be2c1-8dc0-4c68-947f-7af288e72e27.html?seed=363033226
//edgeX, edgeY分别为三角形两直角边长, length,width分别为小方块长和宽, angle为剪切角度,必须介于0度~90度
int cacu(double edgeX, double edgeY, double length, double width, double angle) {
//如果角度大于90度或者小于0度,或者某一边长为负, 直接返回错误
if(angle > 90.0 || angle < 0.0 || edgeX < 0.0 || edgeY < 0.0 || length < 0.0 || width < 0.0) {
return -1;
}
//计算时,只和三角形的短直角边有关
double cEdge = edgeX > edgeY ? edgeY : edgeX;
//短直角边的邻角是大于45度的
angle = angle > 45.0 ? angle : 90.0 - angle;
//有效底边长
double bottom = cEdge / Math.Cos(angle * Math.PI / 180.0);
//完整方块数
int sum = 0;
//对每一层(条)来说,计算高度为小方块的宽width,而每一层的形状都为一个梯形(能剪的情况下)
//其上底较下底的递减值为一固定值
double decValue = width / Math.Tan(angle * Math.PI / 180.0) + width * Math.Tan(angle * Math.PI / 180.0);
while(bottom - decValue > length) {
double top = bottom - decValue;
sum += (int)Math.Floor(top/length);
bottom = top;
}
return sum;
}