создать многоугольник из круга - PullRequest
0 голосов
/ 14 июля 2020

Итак, я пытался создать многоугольники с определенным количеством вершин вне круга, вычисляя точки на этом круге, а затем соединяя их все. Проблема в том, что обработка не соединяет вершины вместе.

Исходя из get go, метод, который я использую, не является оптимальным, вместо вычисления точек и последующего размещения вершин в этих точках , Я использую функцию rotate ().

Я знаю, что есть формула, использующая sin () и cos () для вычисления точек вне круга, но я не могу ее вспомнить.

В любом случае, вот код

translate(width/2,height/2);

ellipse(0,0,250,250);
let numPoints = 3;
beginShape();
for (let i = 0; i < numPoints; i ++){

    vertex(-250/2,0);
    ellipse(-250/2,0,10);
    rotate(TWO_PI/numPoints)
}
endShape();

Спасибо за помощь!

1 Ответ

0 голосов
/ 14 июля 2020

Проверьте этот ответ для подробного объяснения, иначе:

polar to cartesian

x = cos(angle) * radius
y = sin(angle) * radius

for more info also see atan2

p5. js поставляется с Пример правильного многоугольника btw:

// example source: https://p5js.org/examples/form-regular-polygon.html

function setup() {
  createCanvas(720, 400);
}

function draw() {
  background(102);

  push();
  translate(width * 0.2, height * 0.5);
  rotate(frameCount / 200.0);
  polygon(0, 0, 82, 3);
  pop();

  push();
  translate(width * 0.5, height * 0.5);
  rotate(frameCount / 50.0);
  polygon(0, 0, 80, 20);
  pop();

  push();
  translate(width * 0.8, height * 0.5);
  rotate(frameCount / -100.0);
  polygon(0, 0, 70, 7);
  pop();
}

function polygon(x, y, radius, npoints) {
  let angle = TWO_PI / npoints;
  beginShape();
  for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius;
    let sy = y + sin(a) * radius;
    vertex(sx, sy);
  }
  endShape(CLOSE);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
...