원 주위의 한 점을 어떻게 계산합니까?


223

다음 기능을 다양한 언어로 어떻게 구현할 수 있습니까?

(x,y)다음과 같은 입력 값이 주어지면 원 주위의 점을 계산하십시오 .

  • 반지름
  • 각도
  • 원점 (언어에서 지원하는 경우 선택적 매개 변수)

답변:


593

모수 방정식

x = cx + r * cos(a)
y = cy + r * sin(a)

여기서 r은 반경이며, CX는 CY 원점 및 각도.

기본 삼각 함수를 사용하여 모든 언어에 쉽게 적응할 수 있습니다. 대부분의 언어는 삼각 함수에서 각도에 라디안 을 사용 하므로 0..360도를 순환하는 대신 0..2PI 라디안을 순환합니다.


107
참고 a초보자가 이해하는 나를 위해 정말 열심히했다 - 라디안에 있어야합니다.
ioan 2016 년

13
나는 한 시간 동안이 방정식을 도출하려고 노력했습니다. 감사. 고등학교에서 배운 삼각 정체성을 아는 사람이 도움이 될 것입니다.
Isioma Nnodum

1
@Dean 연산자 우선 순위로 인해 추가 대괄호가 필요하지 않습니다. 이 두 방정식 을 가지고 +있고 *괄호가 없으면 항상 *첫 번째 로 이동 한 다음으로 이동하십시오 +.
rbaleksandar

13
@IsiomaNnodum 우리가 방정식이 무엇인지 기억하기 위해 여기로 돌아온다면 그렇게 도움이되지 못했습니다.
b1nary.atr0phy

48

다음은 C #에서의 구현입니다.

    public static PointF PointOnCircle(float radius, float angleInDegrees, PointF origin)
    {
        // Convert from degrees to radians via multiplication by PI/180        
        float x = (float)(radius * Math.Cos(angleInDegrees * Math.PI / 180F)) + origin.X;
        float y = (float)(radius * Math.Sin(angleInDegrees * Math.PI / 180F)) + origin.Y;

        return new PointF(x, y);
    }

5
변환 계수를 미리 계산하여 하드 코딩 된 숫자를 사용하여 변환을 잘못 입력 할 가능성을 줄입니다.
Scottie T

15

누가 당신이있을 때 삼각을 필요로 복잡한 번호 :

#include <complex.h>
#include <math.h>

#define PI      3.14159265358979323846

typedef complex double Point;

Point point_on_circle ( double radius, double angle_in_degrees, Point centre )
{
    return centre + radius * cexp ( PI * I * ( angle_in_degrees  / 180.0 ) );
}

이것은 어떻게 작동합니까? 속도를 어떻게 현명하게 비교합니까? 왜 이것이 더 일반적으로 사용되지 않습니까?
Mark A. Ropper

@ MarkA.Ropper 복소수는 어떻게 작동합니까? -수학 학습서를 찾거나 복잡한 숫자가 무엇인지 이미 알고있는 경우 en.wikipedia.org/wiki/Euler%27s_identity 에서 이동하십시오 . sin을 룩업 테이블로 구현하는 것과 비교할 때 속도가 효율적이지 않을 수도 있지만 때로는 복잡한 숫자를 사용하여 점을 나타내어 다른 속성을 악용하는 경우가 있습니다. 3D 회전에 쿼터니언을 사용하는 것과 마찬가지로 속도가 아니라 그들이 제공하는 기능입니다.
피트 Kirkham

2

JavaScript (ES6)로 구현 :

/**
    * Calculate x and y in circle's circumference
    * @param {Object} input - The input parameters
    * @param {number} input.radius - The circle's radius
    * @param {number} input.angle - The angle in degrees
    * @param {number} input.cx - The circle's origin x
    * @param {number} input.cy - The circle's origin y
    * @returns {Array[number,number]} The calculated x and y
*/
function pointsOnCircle({ radius, angle, cx, cy }){

    angle = angle * ( Math.PI / 180 ); // Convert from Degrees to Radians
    const x = cx + radius * Math.cos(angle);
    const y = cy + radius * Math.sin(angle);
    return [ x, y ];

}

용법:

const [ x, y ] = pointsOnCircle({ radius: 100, angle: 180, cx: 150, cy: 150 });
console.log( x, y );

코드 펜

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.