Зачем создавать другой массив? Вы можете реально редактировать массив, который у вас уже есть. Например: Вы получаете индексированный массив из базы данных. Заполните форму значениями, чтобы пользователь мог видеть старую информацию. Когда пользователь редактирует, скажем, его имя Зачем создавать другой массив? Вы можете реально редактировать массив, который у вас уже есть. Например: Вы получаете индексированный массив из базы данных. Заполните форму значениями, чтобы пользователь мог видеть старую информацию. Когда пользователь редактирует, скажем, его имя [110] myArray ['name'] =
Ваш цикл должен быть настроен как это вместо этого:
for (var i = 0; i < steps; i++) {
xValues[i] = (centerX + radius * Math.cos(2 * Math.PI * i / steps));
yValues[i] = (centerY + radius * Math.sin(2 * Math.PI * i / steps));
}
var xValues = [centerX]; var yValues = [centerY];
- центр круга не является частью его.Изменение:
Math.PI * i / steps
кому:
2*Math.PI * i / steps
Полный круг 2pi радианы, и Вы только идете в радианы пи.
Алгоритм Bresenham является путем быстрее. Вы слышите о нем относительно проведения прямых линий, но существует форма алгоритма для кругов.
Используете ли Вы это или продолжаете аккуратные вычисления (которые ослепительно быстры в эти дни) - только необходимо потянуть 1/8-й из круга. Путем свопинга x, y можно получить другого 1/8-го, и затем отрицание x, y, и и - подкачанный и неподкачанный - дает Вам точки для всей остальной части круга. Ускорение 8x!
Если Вы уже имеете половину круга, просто зеркально отражаете точки для получения другой половины
удостоверьтесь, что Вы делаете это в правильном порядке.
больше speficically, для другой половины Вас просто заменяют"+ sin(...)
"с"- sin(...)
"
Необходимо использовать частичную функцию для ввода радианов в потому что и грех; поэтому примите значения, которые Вы получаете для четверти или половины круга, и отражаете их по оси центральных точек для получения полного круга.
Это сказало, что грех JavaScript и потому что не вполне как придирчивый, таким образом, Вы, должно быть, разделили на два свой радиан или что-то; я записал бы это как:
function circle(radius, steps, centerX, centerY){
var xValues = [centerX];
var yValues = [centerY];
var table="<tr><th>Step</th><th>X</th><th>Y</th></tr>";
var ctx = document.getElementById("canvas").getContext("2d");
ctx.fillStyle = "red"
ctx.beginPath();
for (var i = 0; i <= steps; i++) {
var radian = (2*Math.PI) * (i/steps);
xValues[i+1] = centerX + radius * Math.cos(radian);
yValues[i+1] = centerY + radius * Math.sin(radian);
if(0==i){ctx.moveTo(xValues[i+1],yValues[i+1]);}else{ctx.lineTo(xValues[i+1],yValues[i+1]);}
table += "<tr><td>" + i + "</td><td>" + xValues[i+1] + "</td><td>" + yValues[i+1] + "</td></tr>";
}
ctx.fill();
return table;
}
document.body.innerHTML="<canvas id=\"canvas\" width=\"300\" height=\"300\"></canvas><table id=\"table\"/>";
document.getElementById("table").innerHTML+=circle(150,15,150,150);
Я предположил, что по любой причине Вы хотели, чтобы xValues[0] и yValues[0] были centerX и centerY. Я не могу выяснить, почему Вы хотели бы это, поскольку они уже - значения, переданные в функцию.
Я смог решить его самостоятельно путем умножения количества шагов со стороны 2:
circle: function(radius, steps, centerX, centerY){
var xValues = [centerX];
var yValues = [centerY];
for (var i = 1; i < steps; i++) {
xValues[i] = (centerX + radius * Math.cos(Math.PI * i / steps*2-Math.PI/2));
yValues[i] = (centerY + radius * Math.sin(Math.PI * i / steps*2-Math.PI/2));
}
}