У меня есть функция, которая работает не так, как задумано. Прежде чем продолжить, я хотел бы предисловить это тем фактом, что я обычно программирую в Mathematica и мне было поручено перенести функцию Mathematica (которую я написал) на JavaScript, чтобы ее можно было использовать в электронной таблице Google Docs. У меня около 3 часов опыта работы с JavaScript ...
Весь (небольшой) проект рассчитывает общее количество кристаллов на пластину, учитывая размер пластины и кристалла (среди других входных данных). В части, которая не работает, я проверяю, не выходит ли какой-либо угол матрицы за пределы эффективного радиуса Reff.
Функция принимает список координат X и Y, которые при объединении создают индивидуальные координаты XY центра матрицы. Затем это помещается в отдельную функцию maxDistance, которая вычисляет расстояние до каждого из 4 углов и возвращает максимальное значение. Это максимальное значение сверяется с Reff. Если максимум находится внутри радиуса, к счету кубиков добавляется 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: Per showi, я изменил циклы 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 всегда истинно), я обнаруживаю, что общее количество выполнений цикла верно.
Как я это нашел: я добавил код, который просто распечатывает, что функция делает на каждой итерации цикла, и увидел, что X и Y были правильными, но функция maxDistance возвращала NaN или очень большое значение, когда X || Y были положительными. Я изучу эту функцию.
Спасибо всем за помощь!