Saya memiliki sedikit pikiran kosong tentang ini saat ini. Saya punya masalah di mana saya perlu menghitung posisi titik di sekitar titik pusat, dengan asumsi semuanya berjarak sama dari pusat dan dari satu sama lain.
Jumlah poin bervariasi jadi DrawCirclePoints(int x)
saya yakin ada solusi sederhana, tetapi untuk kehidupan saya, saya tidak bisa melihatnya :)
algorithm
math
trigonometry
geometry
JoeBrown
sumber
sumber
Jawaban:
Titik pada sudut theta pada lingkaran yang pusatnya
(x0,y0)
dan jari-jarinyar
adalah(x0 + r cos theta, y0 + r sin theta)
. Sekarang pilihtheta
nilai-nilai yang berjarak antara 0 dan 2pi.sumber
Diketahui panjang jari-jari r dan sudut t dalam radian dan pusat lingkaran (h, k) , Anda dapat menghitung koordinat titik pada keliling sebagai berikut (ini adalah pseudo-code, Anda harus menyesuaikannya dengan bahasa):
float x = r*cos(t) + h; float y = r*sin(t) + k;
sumber
Berikut solusi menggunakan 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); } }
Contoh keluaran dari
DrawCirclePoints(8, 10, new Point(0,0));
:Semoga berhasil!
sumber
Menggunakan salah satu jawaban di atas sebagai basis, berikut adalah contoh 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 }
sumber
Menempatkan angka di jalur melingkar
// 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); }
sumber
Saya harus melakukan ini di web, jadi inilah versi coffeescript dari jawaban @ scottyab di atas:
sumber
Demi penyelesaian, apa yang Anda gambarkan sebagai "posisi titik di sekitar titik pusat (dengan asumsi semuanya berjarak sama dari pusat)" tidak lain adalah "Koordinat Kutub". Dan Anda meminta cara untuk Convert antara koordinat polar dan Cartesian yang diberikan sebagai
x = r*cos(t)
,y = r*sin(t)
.sumber
Solusi 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; }
sumber
$newx
dan$newy
, meletakkan koordinat jauh di luar radius lingkaran. Coba$newx = (int)($center->getX() + ($radius * cos($angle)));
dan serupa untuk$newy
.Sudut antara masing-masing titik Anda akan menjadi
2Pi/x
sehingga Anda dapat mengatakan bahwa untuk titikn= 0 to x-1
sudut dari titik 0 yang ditentukan adalah2nPi/x
.Dengan asumsi titik pertama Anda berada di
(r,0)
( di mana r adalah jarak dari titik pusat) maka posisi relatif terhadap titik pusat adalah:sumber
Solusi Kerja di Java:
sumber
Ini adalah
R
versi berdasarkan jawaban @Pirijan di atas.sumber
Berikut adalah cara saya menemukan titik pada lingkaran dengan javascript, menghitung sudut (derajat) dari atas lingkaran.
sumber
Berdasarkan jawaban dari Daniel di atas, inilah pendapat saya menggunakan Python3.
sumber