Je suis un peu aveugle à ce sujet pour le moment. J'ai un problème où je dois calculer la position des points autour d'un point central, en supposant qu'ils sont tous équidistants du centre et l'un de l'autre.
Le nombre de points est variable donc DrawCirclePoints(int x)
je suis sûr qu'il y a une solution simple, mais pour la vie de moi, je ne peux pas la voir :)
algorithm
math
trigonometry
geometry
JoeBrown
la source
la source
Réponses:
Un point à l'angle thêta sur le cercle dont le centre est
(x0,y0)
et dont le rayon estr
est(x0 + r cos theta, y0 + r sin theta)
. Choisissez maintenant destheta
valeurs régulièrement espacées entre 0 et 2pi.la source
Étant donné une longueur de rayon r et un angle t en radians et le centre d'un cercle (h, k) , vous pouvez calculer les coordonnées d'un point sur la circonférence comme suit (il s'agit d'un pseudo-code, vous devrez l'adapter à votre Langue):
float x = r*cos(t) + h; float y = r*sin(t) + k;
la source
Voici une solution utilisant 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); } }
Exemple de sortie de
DrawCirclePoints(8, 10, new Point(0,0));
:Bonne chance!
la source
En utilisant l'une des réponses ci-dessus comme base, voici l'exemple 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 }
la source
Placer un nombre dans un chemin circulaire
// 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); }
la source
Je devais le faire sur le Web, alors voici une version coffeescript de la réponse de @ scottyab ci-dessus:
la source
Solution 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; }
la source
$newx
et$newy
, mettant les coordonnées bien en dehors du rayon du cercle. Essayez$newx = (int)($center->getX() + ($radius * cos($angle)));
et similaire pour$newy
.Par souci de complétion, ce que vous décrivez comme «la position des points autour d'un point central (en supposant qu'ils sont tous équidistants du centre)» n'est rien d'autre que des «coordonnées polaires». Et vous demandez moyen de convertir entre coordonnées polaires et cartésiennes qui est donnée à
x = r*cos(t)
,y = r*sin(t)
.la source
L'angle entre chacun de vos points va être
2Pi/x
donc vous pouvez dire que pour les points,n= 0 to x-1
l'angle à partir d'un point 0 défini est2nPi/x
.En supposant que votre premier point est à
(r,0)
(où r est la distance du point central), les positions par rapport au point central seront:la source
Solution de travail en Java:
la source
Voici une
R
version basée sur la réponse @Pirijan ci-dessus.la source
Voici comment j'ai découvert un point sur un cercle avec javascript, en calculant l'angle (degré) à partir du haut du cercle.
la source
Sur la base de la réponse ci-dessus de Daniel, voici mon point de vue sur Python3.
la source