1

我正在构建一个 javascript 小部件,以帮助针织者在遇到“在一行中均匀增加 X 针数”的图案指令时确定在增加之间放置的针数。问题描述为here

到目前为止,只要结果是偶数,我的代码就可以工作。

如果数字不均匀,我一直试图弄清楚如何使它工作。我认为我需要做的是用针迹组数填充一个数组,然后在数组中递增,向每个组添加 1,直到没有剩余。

但我不知道如何 a) 用可变数量的项目填充数组 - 例如:有多少组针迹?我需要数组中的项目数。b) 将每组的针数存储在数组中的每一项中 c) 将数组中的每一项加 1,直到剩余为 0。

我也对其他方法持开放态度。

这是我到目前为止的代码。我还没有添加 if/else 条件,也没有添加 for 循环。任何想法或想法将不胜感激。提前致谢!

$('#calculateIncrease').submit(function() {
//get the number of stitches in the row
var stitchesInRow = $('input#stitchesInRow').val();
//get the number of stitches to increase by
var increaseByHowMany = $('input#increaseByHowMany').val();
//add one to this number
var divideBy = parseInt(increaseByHowMany,10) + 1;
//divide the number of stitches in row by increase plus one
var stitchesBetween = parseInt(stitchesInRow,10)/divideBy;
var leftover = stitchesInRow % divideBy;
//if there is no leftover
//return the result
$('#howManyStitches').html("Put " + stitchesBetween + " stitches between each increase.");
//if there is a leftover
var stitchesPerGroup = Math.floor(stitchesBetween);
//take divideBy, which is also the number of groups of stitches
//create an array that contains the number of groups (divideBy)
var stitchesArray = new Array(divideBy);
//each array item populated by the integer that is the first half of the division
//for each array item, add 1 until leftover = 0
//there should be some groups that get one added and others that do not
return false;
});
4

1 回答 1

0

这不是问题的答案,因为它是目前制定的(akonsu 已经在他的评论中回答了问题的标题),也没有直接谈论这个问题。

但是,由于我了解她想要完成的事情(并且她对其他方法持开放态度),我认为这本质上是一个非常好的问题,
所以我发布这个是为了帮助其他人了解她真正想要完成的事情她发布的代码并帮助她更详细地定义算法变化和最终结果/输出可能/应该是什么。

她希望将x数量(每行的额外针数)尽可能均匀地分布在y数量(前一行的针数)上。

图像

她目前的基本公式是:y/(x+1)
包括四舍五入会导致:

---------- 10针
-----+----- 每 5 加 1
---+----+--- 每 3.3333 加 2
---+--+---+-- 每2.5加3
--+--+--+--+-- 加4,每2
--+-+--+--+-+-- 每1.6667加5

一个工作示例(在 jsFiddle 中)可能如下所示:
Javascript

function handler(){
  var i, d=document,                                    //saving some code
      base=Number(d.getElementById('base').value),      //get row input
       add=Number(d.getElementById('add').value) + 1,   //get stitches to add
       ret='',          //return var
       tmp=0,           //temp var
       crr=0,           //carry var
       per=base/add;    //calculate period

  for (i = 1; i < add; i++) {   //start at 1 instead of 0
    tmp=Math.round(i * per);    //round first period
    ret+=tmp-crr+' + ';         //first period with previous period
    crr=tmp;                    //carry period
  }
  ret+=Math.round(add * per)-crr;          //last normal stitches
  d.getElementById('out').innerHTML=ret;   //output result
}

HTML:

Stitches on row: <input type="text" 
                          id="base" 
                       value="10"
                    onchange="handler();"
                 >
<br>
Stitches to add: <input type="text" 
                          id="add" 
                       value="1"
                    onchange="handler();"
                 >
<br>
<button onclick="handler();">calculate</button>
<br>
  Every + is a extra stitch: <br>
<div id="out">&nbsp;</div>

我认为这会按照她目前的预期工作。但是,我认为人们可以在其中找到一种模式,我不知道如何以简单的方式做到这一点。任何人?

但我认为这只适用于只从左到右的东西,而不是像毛衣袖子这样的圆圈。那么她可能需要一些看起来更像“旋转木马”的东西:

“轮播”风格(公式:((y+x)/x)-1):

---------- 10针
----------+ 每10加1
-----+-----+ 加 2,每 5
---+----+---+ 每 3.3333 加 3
--+---+--+---+ 每 3.5 加 4
--+--+--+--+--+ 加5,每2

正如你所看到的,分布是不同的。

祝你的项目好运!

于 2013-01-08T11:15:13.577 回答