Круг координирует для выстраивания в JavaScript

Зачем создавать другой массив? Вы можете реально редактировать массив, который у вас уже есть. Например: Вы получаете индексированный массив из базы данных. Заполните форму значениями, чтобы пользователь мог видеть старую информацию. Когда пользователь редактирует, скажем, его имя myArray ['name'] =

Зачем создавать другой массив? Вы можете реально редактировать массив, который у вас уже есть. Например: Вы получаете индексированный массив из базы данных. Заполните форму значениями, чтобы пользователь мог видеть старую информацию. Когда пользователь редактирует, скажем, его имя [110]

POST ['name']

12
задан Aliaksandr Sushkevich 6 April 2018 в 21:03
поделиться

6 ответов

Ваш цикл должен быть настроен как это вместо этого:

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));
}
  • Запустите свой цикл в 0
  • Шаг через все 2 * диапазон PI, не просто PI.
  • Вы не должны иметь var xValues = [centerX]; var yValues = [centerY]; - центр круга не является частью его.
22
ответ дан 2 December 2019 в 04:10
поделиться

Изменение:

Math.PI * i / steps

кому:

2*Math.PI * i / steps

Полный круг 2pi радианы, и Вы только идете в радианы пи.

5
ответ дан 2 December 2019 в 04:10
поделиться

Алгоритм Bresenham является путем быстрее. Вы слышите о нем относительно проведения прямых линий, но существует форма алгоритма для кругов.

Используете ли Вы это или продолжаете аккуратные вычисления (которые ослепительно быстры в эти дни) - только необходимо потянуть 1/8-й из круга. Путем свопинга x, y можно получить другого 1/8-го, и затем отрицание x, y, и и - подкачанный и неподкачанный - дает Вам точки для всей остальной части круга. Ускорение 8x!

7
ответ дан 2 December 2019 в 04:10
поделиться

Если Вы уже имеете половину круга, просто зеркально отражаете точки для получения другой половины
удостоверьтесь, что Вы делаете это в правильном порядке.

больше speficically, для другой половины Вас просто заменяют"+ sin(...)"с"- sin(...)"

1
ответ дан 2 December 2019 в 04:10
поделиться

Необходимо использовать частичную функцию для ввода радианов в потому что и грех; поэтому примите значения, которые Вы получаете для четверти или половины круга, и отражаете их по оси центральных точек для получения полного круга.

Это сказало, что грех 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. Я не могу выяснить, почему Вы хотели бы это, поскольку они уже - значения, переданные в функцию.

1
ответ дан 2 December 2019 в 04:10
поделиться

Я смог решить его самостоятельно путем умножения количества шагов со стороны 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));
   }
}
0
ответ дан 2 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: