假设有一条线(1, 30)(float x = 30) 我需要将它分成几段,每个下一段应该比前一段宽,最后一段应该比第一段宽 X 倍。
我有一个想法,首先将线分成相等的部分,然后增加下一条并减少前一条,直到达到两个条件: - 第一段比最后一段短 X 倍 - 对于相同的乘数,每个段(第一段除外)比前一段宽
//input:
int lineDimension = 30;
int numberOfSegments = 5;
int step = 1;
float[] splitLineIntoSegments(float lineDimension, int numberOfSegments, float differenceBetweenFirstAndLastSegmentMultiplicator, float step) {
float[] result = new float[numberOfSegments];
//first split into equal segments
for (int i = 0; i < numberOfSegments; i++) {
result[i] = lineDimension / numberOfSegments;
}
//increase each next value untill difference reached
do {
for (int ii = 0; ii < numberOfSegments; ii++) {
if (result[ii]-step<=0)
return result;
if (ii>numberOfSegments/2){
result[ii] += step;
}
else result[ii] -= step;
}
}
while ((float)result[numberOfSegments] / (float)result[0] > differenceBetweenFirstAndLastSegmentMultiplicator);
return result;
}
float [] res = splitLineIntoSegments(lineDimension,numberOfSegments,2,step);
结果应该是 4,5,6,7,8
有更好的方法吗?
拉丁的传说
翻阅古今
相关分类