2016-05-10 13 views
0

Ich möchte n Punkte gleichmäßig auf einem Kreisumfang nur in den Quadranten I und IV verteilen.Punkte gleichmäßig auf den Kreisumfang verteilen nur in den Quadranten I und IV

Als Parameter, ich habe die Zahl des Punktes n, das Zentrum des Kreises Koordinaten optimiert cx und cy und den Radius r.

kann ich die Punkte über den gesamten Umfang verteilen, wie diese Formel unten, aber ich bin für die Formel sie nur in den Quadranten zu verbreiten I und IV wie diese

var n = 5; 
var cx = 1; 
var cy = 1; 
var r = 2; 

//I store each point's coordinates in this array below 
var coordinates = []; 

for (var i=0; i < n; i++) { 
    //defining point's angle with the center of the circle in radiant 
    //this angle distribute the points evenly over all 4 quadrants 
    var angle = ((360/n) * i) * (Math.PI/180); 

    //calculating the point's coordinates on the circle circumference 
    var pointX = cx + r * Math.cos(angle); 
    var pointY = cx + r * Math.sin(angle); 

    //storing the point's coordinates 
    coordinates.push([pointX, pointY]); 
} 
+0

was sind die Quadranten 1 und 4? – Thomas

+0

https://en.wikipedia.org/wiki/Quadrant_%28plane_geometry%29 –

+0

Sind cx und cy das Zentrum des Kreises? – JakeGill70

Antwort

1

Hier würden die Schritte, die ich dieses Problem zu lösen nehmen würde:

  1. den Winkel zw finden. jeder Punkt var incrementBy = 180/n
  2. Startwinkel wird 270º und Endwinkel wird 90º
  3. durchlaufen über

Code

var increment = 180/n 
var startAngle = 270 
for (var i = 0; i < n; i++) 
{ 
    var angle = startAngle + increment * i 
    var rads = angle * Math.pi/180 

    var tx = cx + r * Math.cos(angle) 
    var ty = cy + r * Math.sin(angle) 

    coords.push([tx, ty]) 
} 

note

ich nicht tat sein sein Mühe, für traditionelle Quadranten zu konvertieren (vs JS y-Achse bewegt d eigene). Wenn dies erforderlich ist, invertieren Sie nach Ihren Berechnungen einfach den Wert ty. Ich habe auch nicht die Mühe gemacht, den Winkelwert zu reduzieren, wenn er 360º übersteigt, wenn Sie wieder in Quad I inkrementieren.

1

?

var n = 5; 
var r = 2; 
var cx = 1; 
var cy = 1; 
var coordinates = []; 

for(var i=0; i<n; ++i){ 
    var a = (i+.5)/n * Math.PI; 
    coordinates.push([ 
    cx + Math.sin(a) * r, 
    cy - Math.cos(a) * r 
    ]); 
} 
+0

Es ist nah ... das verteilt die Punkte in den Quadranten I und II, nicht I und IV –

+0

Quadrant 2? oben links? Es gibt keinen Weg, ein Coodinate kann nach links von cx kommen, nicht in diesem Code. Hast du die Sünde kopiert und den richtigen Weg gefunden? – Thomas

0
var n = 5; 
var cx = 1; 
var cy = 1; 
var r = 2; 

//I store each point's coordinates in this array below 
var coordinates = []; 

for (var i=0; i < n; i++) { 
    //defining the angle of the point with the center of the circle in radiant 
    var angle = ((360/n) * i) * (Math.PI/180); 

    //calculating the coordinates of the point on the circle circumference 
    var pointX = cx + r * Math.cos(angle); 
    var pointY = cx + r * Math.sin(angle); 



    // Here, we are going to use a boolean expression to determine if 
    // [pointX, pointY] is within quadrant 1 or 4. 
    // We can start with this boolean equation: 
    // (pointX >= cx && pointY >= cy) || (pointX >= cx && pointY <= cy) 
    // But this problem can be simplified to only pointX >= cx 

    if(pointX >= cx){ 
     //storing the point's coordinates 
     coordinates.push([pointX, pointY]); 
    } 
} 
+0

Ich muss alle Punkte in den Quadranten I und IV verteilen –

+0

Dann glaube ich, dass ich Ihre Frage nicht vollständig verstehe. Wünschen Sie zwei kleinere Kreise in den Quadranten 1 und 4 oder nur die Koordinaten, die in den Quadranten 1 und 4 erscheinen. Oder möchten Sie, dass etwas in den Quadranten 2 und 3 in die Quadranten 1 und 4 übersetzt wird? – JakeGill70

Verwandte Themen