ฉันจะคำนวณจุดบนเส้นรอบวงของวงกลมได้อย่างไร


223

ฟังก์ชั่นต่อไปนี้สามารถใช้งานในภาษาต่าง ๆ ได้อย่างไร?

คำนวณ(x,y)จุดบนเส้นรอบวงของวงกลมโดยกำหนดค่าอินพุตเป็น:

  • รัศมี
  • มุม
  • Origin (พารามิเตอร์ที่เป็นทางเลือกหากสนับสนุนโดยภาษา)

คำตอบ:


593

สมการตัวแปรสำหรับวงกลมคือ

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

ที่ไหนRคือรัศมีcx, cyกำเนิดและมุม

มันค่อนข้างง่ายที่จะปรับให้เข้ากับภาษาใด ๆ ด้วยฟังก์ชั่นตรีโกณมิติพื้นฐาน โปรดทราบว่าภาษาส่วนใหญ่จะใช้เรเดียนสำหรับมุมในฟังก์ชั่นตรีโกณมิติดังนั้นแทนที่จะขี่จักรยานผ่าน 0..360 องศาคุณกำลังปั่นผ่านเรเดียน 0..2PI


107
โปรดทราบว่าaต้องเป็นเรเดียน - มันยากสำหรับฉันในฐานะผู้เริ่มต้นที่จะเข้าใจ
ioan

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ถ้าคุณรู้อยู่แล้วว่าจำนวนเชิงซ้อนคืออะไร มันอาจจะไม่ได้มีประสิทธิภาพในด้านความเร็วเมื่อเทียบกับการพูดถึงการใช้ความบาปเป็นตารางค้นหา แต่บางครั้งคุณกำลังใช้ตัวเลขที่ซับซ้อนเพื่อแสดงจุดตลอดเพื่อใช้ประโยชน์จากคุณสมบัติอื่น ๆ ของพวกเขา คล้ายกับการใช้ควอเทอร์เนียนสำหรับการหมุน 3 มิติไม่ใช่ความเร็ว แต่เป็นความสามารถที่ให้คุณ
Pete 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 );

Codepen

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.