3

意図したとおりに動作しない関数があります。先に進む前に、私は通常 Mathematica でプログラミングを行っており、(私が作成した) Mathematica 関数を JavaScript に移植して Google Docs スプレッドシートで使用できるようにする任務を負っています。私は約 3 時間の JavaScript の経験があります...

全体の (小さい) プロジェクトは、与えられたウェーハとダイのサイズ (他の入力の中でも) を考慮して、ウェーハあたりの総ダイ数を計算しています。動作していない部分は、サイコロの角が有効半径 Ref の外にあるかどうかを確認する場所です。

この関数は X 座標と Y 座標のリストを取得し、これらを組み合わせると、ダイの中心の個々の XY 座標が作成されます。それは、4 つのコーナーのそれぞれの距離を計算し、最大値を返す別の関数「maxDistance」に入れられます。この最大値は Ref に対してチェックされます。最大値が半径の内側にある場合、ダイの数に 1 が追加されます。

// Take a list of X and Y values and calculate the Gross Die per Wafer
function CoordsToGDW(Reff,xSize,ySize,xCoords,yCoords) {

  // Initialize Variables
  var count = 0;

  // Nested loops create all the x,y coords of the die centers
  for (var i = 0; i < xCoords.length; i++) {
    for (var j = 0; j < yCoords.length, j++) {         
      // Add 1 to the die count if the distance is within the effective radius
      if (maxDistance(xCoords[i],yCoords[j],xSize,ySize) <= Reff) {count = count + 1}
    }
  }

  return count;
}

ここに私が得ているもののいくつかの例があります:

xArray={-52.25, -42.75, -33.25, -23.75, -14.25, -4.75, 4.75, 14.25, 23.75, 33.25, 42.75, 52.25, 61.75}
yArray={-52.5, -45.5, -38.5, -31.5, -24.5, -17.5, -10.5, -3.5, 3.5, 10.5, 17.5, 24.5, 31.5, 38.5, 45.5, 52.5, 59.5}
CoordsToGDW(45,9.5,7.0,xArray,yArray)
  returns: 49 (should be 72)

xArray={-36, -28, -20, -12, -4, 4, 12, 20, 28, 36, 44}
yArray={-39, -33, -27, -21, -15, -9, -3, 3, 9, 15, 21, 27, 33, 39, 45}
CoordsToGDW(32.5,8,6,xArray,yArray)
  returns: 39 (should be 48)

maxDistance() が正しい値を返していることはわかっています。それで、私の単純な間違いはどこですか?

また、Mathematica 表記での書き込みをお許しください...

編集 #1: 少しの書式設定。

編集 #2: ショーイごとに、WHILE ループを FOR ループに変更し、<= を < に置き換えました。まだ正しい答えではありません。少しはすっきりしましたが…。

編集 #3: 私が本質的にやろうとしているのは、[a,b] と [a,b,c] を取り、[[a,a],[a,b],[a,c],[b] を返すことです。 ,a],[b,b],[b,c]]

編集#4:

したがって、ネストされたループ正しく機能していることがわかりました。maxDistance 関数を削除して 1 に置き換えると (1 <= Reff が常に true になるように)、ループ実行の合計数が正しいことがわかります。

見つけ方: 各ループ反復で関数が何をしているかを出力するだけのコードをいくつか追加し、X と Y が正しいことを確認しましたが、maxDistance 関数は X || のときに NaN または非常に大きな値を返していました。Yは陽性でした。この機能について調べてみます。

みんな助けてくれてありがとう!

4

3 に答える 3

1

私が間違っていない場合は、実際の配列サイズよりも1つ多い要素を使用しています。

while(i <= xCoords.length){

そのはず

while(i <xCoords.length){

でも私は〜がいい

for(var i = 0; i <xCoords.length; i ++)

それが助けになるならDunno:)

そして、var a = {10、9、8、7}を実行している場合、それは配列ではなくオブジェクトであり、おそらくvar a=[];を意味します。またはそれは数学的なものです:)

于 2012-12-04T04:38:45.533 に答える
0
while (i < xCoords.length) {
    j = 0;
    while (j < yCoords.length) {  

これを試して

于 2012-12-04T04:40:28.670 に答える
0

したがって、ネストされたループ正しく機能していることがわかりました。maxDistance 関数を削除して 1 に置き換えると (1 <= Reff が常に true になるように)、ループ実行の合計数が正しいことがわかります。

見つけ方: 各ループ反復で関数が何をしているかを出力するだけのコードをいくつか追加し、X と Y が正しいことを確認しましたが、maxDistance 関数は X || のときに NaN または非常に大きな値を返していました。Yは陽性でした。この機能について調べてみます。

于 2012-12-04T16:48:19.203 に答える