Estou com a mente um pouco em branco sobre isso no momento. Eu tenho um problema em que preciso calcular a posição dos pontos em torno de um ponto central, presumindo que eles estão todos equidistantes do centro e uns dos outros.
O número de pontos é variável, então DrawCirclePoints(int x)
tenho certeza de que há uma solução simples, mas pela minha vida, simplesmente não consigo ver :)
algorithm
math
trigonometry
geometry
JoeBrown
fonte
fonte
Respostas:
Um ponto no ângulo theta no círculo cujo centro é
(x0,y0)
e cujo raio ér
é(x0 + r cos theta, y0 + r sin theta)
. Agora escolhatheta
valores uniformemente espaçados entre 0 e 2pi.fonte
Dado um comprimento de raio r e um ângulo t em radianos e o centro de um círculo (h, k) , você pode calcular as coordenadas de um ponto na circunferência da seguinte forma (este é um pseudocódigo, você terá que adaptá-lo ao seu língua):
float x = r*cos(t) + h; float y = r*sin(t) + k;
fonte
Aqui está uma solução usando C #:
void DrawCirclePoints(int points, double radius, Point center) { double slice = 2 * Math.PI / points; for (int i = 0; i < points; i++) { double angle = slice * i; int newX = (int)(center.X + radius * Math.Cos(angle)); int newY = (int)(center.Y + radius * Math.Sin(angle)); Point p = new Point(newX, newY); Console.WriteLine(p); } }
Saída de amostra de
DrawCirclePoints(8, 10, new Point(0,0));
:Boa sorte!
fonte
Usando uma das respostas acima como base, aqui está o exemplo Java / Android:
protected void onDraw(Canvas canvas) { super.onDraw(canvas); RectF bounds = new RectF(canvas.getClipBounds()); float centerX = bounds.centerX(); float centerY = bounds.centerY(); float angleDeg = 90f; float radius = 20f float xPos = radius * (float)Math.cos(Math.toRadians(angleDeg)) + centerX; float yPos = radius * (float)Math.sin(Math.toRadians(angleDeg)) + centerY; //draw my point at xPos/yPos }
fonte
Colocando um número em um caminho circular
// variable let number = 12; // how many number to be placed let size = 260; // size of circle i.e. w = h = 260 let cx= size/2; // center of x(in a circle) let cy = size/2; // center of y(in a circle) let r = size/2; // radius of a circle for(let i=1; i<=number; i++) { let ang = i*(Math.PI/(number/2)); let left = cx + (r*Math.cos(ang)); let top = cy + (r*Math.sin(ang)); console.log("top: ", top, ", left: ", left); }
fonte
Eu tive que fazer isso na web, então aqui está uma versão em coffeescript da resposta de @scottyab acima:
fonte
Solução PHP:
class point{ private $x = 0; private $y = 0; public function setX($xpos){ $this->x = $xpos; } public function setY($ypos){ $this->y = $ypos; } public function getX(){ return $this->x; } public function getY(){ return $this->y; } public function printX(){ echo $this->x; } public function printY(){ echo $this->y; } }
function drawCirclePoints($points, $radius, &$center){ $pointarray = array(); $slice = (2*pi())/$points; for($i=0;$i<$points;$i++){ $angle = $slice*$i; $newx = (int)($center->getX() + ($radius * cos($angle))); $newy = (int)($center->getY() + ($radius * sin($angle))); $point = new point(); $point->setX($newx); $point->setY($newy); array_push($pointarray,$point); } return $pointarray; }
fonte
$newx
e$newy
, colocando as coordenadas maneira fora do raio do círculo. Experimente$newx = (int)($center->getX() + ($radius * cos($angle)));
e semelhante para$newy
.Para fins de conclusão, o que você descreve como "posição de pontos em torno de um ponto central (assumindo que todos eles estão equidistantes do centro)" nada mais é que "Coordenadas polares". E você está pedindo maneira de converter entre coordenadas polares e cartesianas que é dada como
x = r*cos(t)
,y = r*sin(t)
.fonte
O ângulo entre cada um dos seus pontos será
2Pi/x
então você pode dizer que para os pontosn= 0 to x-1
o ângulo de um ponto 0 definido é2nPi/x
.Supondo que seu primeiro ponto esteja em
(r,0)
(onde r é a distância do ponto central), então as posições relativas ao ponto central serão:fonte
Solução de trabalho em Java:
fonte
Aqui está uma
R
versão baseada na resposta @Pirijan acima.fonte
Aqui está como descobri um ponto em um círculo com javascript, calculando o ângulo (grau) a partir do topo do círculo.
fonte
Com base na resposta de Daniel acima, aqui está minha opinião sobre o uso do Python3.
fonte