[algorithm] 원에서 점의 위치 계산

나는 현재 이것에 대해 약간의 마음이 비어 있습니다. 중심점 주변의 점 위치를 계산해야하는 문제가 있는데, 중심점과 서로 등거리에 있다고 가정합니다.

포인트 수는 가변적이므로 DrawCirclePoints(int x)
간단한 해결책이 있다고 확신하지만 제 삶을 위해 볼 수 없습니다 🙂



답변

중심이 (x0,y0)이고 반지름이 인 원의 각도 세타에있는 점 r입니다 (x0 + r cos theta, y0 + r sin theta). 이제 theta0에서 2pi 사이의 균등 한 간격으로 값을 선택 합니다.


답변

반경 길이 r 과 각도 t (라디안)와 원의 중심 (h, k)이 주어지면 다음과 같이 원주에있는 점의 좌표를 계산할 수 있습니다 (이는 의사 코드입니다. 언어):

float x = r*cos(t) + h;
float y = r*sin(t) + k;


답변

다음은 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);
    }
}

의 샘플 출력 DrawCirclePoints(8, 10, new Point(0,0));:

{X=10,Y=0}
{X=7,Y=7}
{X=0,Y=10}
{X=-7,Y=7}
{X=-10,Y=0}
{X=-7,Y=-7}
{X=0,Y=-10}
{X=7,Y=-7}

행운을 빕니다!


답변

위 답변 중 하나를 기본으로 사용하여 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
}


답변

원형 경로에 숫자 배치

// 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);
}


답변

웹에서이 작업을 수행해야했기 때문에 위 의 @ scottyab 답변 coffeescript 버전이 있습니다 .

points = 8
radius = 10
center = {x: 0, y: 0}

drawCirclePoints = (points, radius, center) ->
  slice = 2 * Math.PI / points
  for i in [0...points]
    angle = slice * i
    newX = center.x + radius * Math.cos(angle)
    newY = center.y + radius * Math.sin(angle)
    point = {x: newX, y: newY}
    console.log point

drawCirclePoints(points, radius, center)


답변

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;
}