Ich habe im Moment ein bisschen Bedenken. Ich habe ein Problem, bei dem ich die Position von Punkten um einen zentralen Punkt berechnen muss, vorausgesetzt, sie sind alle gleich weit vom Zentrum und voneinander entfernt.
Die Anzahl der Punkte ist variabel, daher DrawCirclePoints(int x)
bin ich mir sicher, dass es eine einfache Lösung gibt, aber für mein Leben kann ich sie einfach nicht sehen :)
algorithm
math
trigonometry
geometry
JoeBrown
quelle
quelle
Antworten:
Ein Punkt im Winkel Theta auf dem Kreis, dessen Mittelpunkt
(x0,y0)
und dessen Radiusr
ist(x0 + r cos theta, y0 + r sin theta)
. Wählen Sie nuntheta
Werte mit gleichmäßigem Abstand zwischen 0 und 2 pi.quelle
Bei einer Radiuslänge r und einem Winkel t im Bogenmaß und dem Mittelpunkt eines Kreises (h, k) können Sie die Koordinaten eines Punktes auf dem Umfang wie folgt berechnen (dies ist ein Pseudocode, den Sie an Ihren anpassen müssen Sprache):
float x = r*cos(t) + h; float y = r*sin(t) + k;
quelle
Hier ist eine Lösung mit 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); } }
Beispielausgabe von
DrawCirclePoints(8, 10, new Point(0,0));
:Viel Glück!
quelle
Anhand einer der oben genannten Antworten als Basis finden Sie hier das Java / Android-Beispiel:
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 }
quelle
Platzieren einer Zahl auf einer Kreisbahn
// 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); }
quelle
Ich musste dies im Web tun, daher hier eine Coffeescript-Version von @ scottyabs Antwort oben:
quelle
PHP-Lösung:
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; }
quelle
$newx
und$newy
setzt die Koordinaten weit außerhalb des Kreisradius. Versuchen Sie$newx = (int)($center->getX() + ($radius * cos($angle)));
und ähnlich für$newy
.Der Vollständigkeit halber ist das, was Sie als "Position von Punkten um einen zentralen Punkt (vorausgesetzt, sie sind alle gleich weit vom Zentrum entfernt)" beschreiben, nichts anderes als "Polarkoordinaten". Und Sie fragen nach einer Möglichkeit, zwischen polaren und kartesischen Koordinaten zu konvertieren, die als
x = r*cos(t)
,y = r*sin(t)
.quelle
Der Winkel zwischen jedem Ihrer Punkte wird
2Pi/x
so sein, dass Sie sagen können, dass für Punkten= 0 to x-1
der Winkel von einem definierten 0-Punkt ist2nPi/x
.Angenommen, Ihr erster Punkt liegt bei
(r,0)
(wobei r der Abstand vom Mittelpunkt ist), dann sind die Positionen relativ zum Mittelpunkt:quelle
Arbeitslösung in Java:
quelle
Hier ist eine
R
Version, die auf der obigen Antwort von @Pirijan basiert.quelle
So habe ich mit Javascript einen Punkt auf einem Kreis herausgefunden und den Winkel (Grad) vom oberen Rand des Kreises berechnet.
quelle
Basierend auf der obigen Antwort von Daniel, hier ist meine Einstellung mit Python3.
quelle