Làm thế nào các chức năng sau đây có thể được thực hiện trong các ngôn ngữ khác nhau?
Tính (x,y)
điểm trên chu vi của một vòng tròn, cho các giá trị đầu vào của:
- Bán kính
- Góc
- Nguồn gốc (tham số tùy chọn, nếu được hỗ trợ bởi ngôn ngữ)
Làm thế nào các chức năng sau đây có thể được thực hiện trong các ngôn ngữ khác nhau?
Tính (x,y)
điểm trên chu vi của một vòng tròn, cho các giá trị đầu vào của:
Câu trả lời:
Các phương trình tham số cho một vòng tròn là
x = cx + r * cos(a)
y = cy + r * sin(a)
Trong trường hợp r là bán kính, cx, cy nguồn gốc, và một góc.
Điều đó khá dễ dàng để thích nghi với bất kỳ ngôn ngữ nào với các chức năng cơ bản. Lưu ý rằng hầu hết các ngôn ngữ sẽ sử dụng radian cho góc trong các hàm trig, thay vì đi xe đạp qua 0..360 độ, bạn đang đạp xe qua radian 0..2PI.
+
và *
thích trong hai phương trình đó và không có bất kỳ dấu ngoặc nào, bạn luôn luôn đi *
đầu tiên và sau đó cho +
.
Đây là triển khai của tôi trong 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);
}
Ai cần trig khi bạn có số phức :
#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 ) );
}
Được triển khai trong 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 ];
}
Sử dụng:
const [ x, y ] = pointsOnCircle({ radius: 100, angle: 180, cx: 150, cy: 150 });
console.log( x, y );
a
phải bằng radian - điều đó thực sự khó đối với tôi khi mới bắt đầu hiểu.