找到具有给定中心点,半径和度数的圆上的点

Kyl*_*son 77 c# geometry

我做了这样的数学运算已经10年了......我正在编写一个2D游戏并移动一个玩家.当我移动玩家时,我试图计算距离玩家位置200像素的圆上的点,给出-360到360之间的正OR负角度(度).屏幕是1280x720,其中0,0是中心点的屏幕.玩家围绕整个笛卡尔坐标系移动.我试图找到的重点可能是屏幕上的.

我尝试了文章中的公式找到半径和角度的点,但我不相信我理解"角度"是什么,因为当我将角度-360到360转换为Cos(角度)或Sin时,我得到了奇怪的结果(角度).

所以我举例说......

  • 笛卡尔平面上的1280x720
  • 中心点(球员的位置):
    • 设x =最小值-640到最大值640之间的数字
    • 设y =最小-360到最大360之间的数字
  • 玩家周围的圆圈半径:让r总是= 200
  • 角度:让a = -360到360之间给出的数字(允许负向下指向或正向向上指向,因此-10和350会给出相同的答案)

在圆圈上返回X的公式是什么?

在圈子上返回Y的公式是什么?

在此输入图像描述 在此输入图像描述

yoo*_*er8 63

链接中的简单方程式给出了圆上的点相对于圆心的X和Y坐标.

X = r * cosine(angle)  
Y = r * sine(angle)
Run Code Online (Sandbox Code Playgroud)

这将告诉您该点距离圆心的距离有多远.由于您具有中心坐标(Cx,Cy),只需添加计算的偏移量即可.

圆上的点的坐标是:

X = Cx + (r * cosine(angle))  
Y = Cy + (r * sine(angle))
Run Code Online (Sandbox Code Playgroud)

  • 不应该是`X = xcircle +(r*sine(angle))```X = xcircle +(r*cosine(angle))`(反之亦然``Y`)? (3认同)
  • 注意,角度应为弧度值! (2认同)

Set*_*tin 13

您应该发布您正在使用的代码.这有助于准确识别问题.

但是,由于您提到使用-360到360来测量角度,因此您可能正在使用数学库中不正确的单位.大多数三角函数的实现使用弧度作为输入.如果你使用学位代替......你的答案将是奇怪的错误.

x_oncircle = x_origin + 200 * cos (degrees * pi / 180)
y_oncircle = y_origin + 200 * sin (degrees * pi / 180)
Run Code Online (Sandbox Code Playgroud)

请注意,您可能还会遇到象限不是您所期望的情况.这可以通过仔细选择角度零的位置来修复,或者通过手动检查您期望的象限并将自己的符号应用于结果值来解决.


Joh*_*son 6

我强烈建议使用矩阵进行此类操作.这是最通用的方法,请参见下面的示例:

// The center point of rotation
var centerPoint = new Point(0, 0);
// Factory method creating the matrix                                        
var matrix = new RotateTransform(angleInDegrees, centerPoint.X, centerPoint.Y).Value;
// The point to rotate
var point = new Point(100, 0);
// Applying the transform that results in a rotated point                                      
Point rotated = Point.Multiply(point, matrix); 
Run Code Online (Sandbox Code Playgroud)
  • 侧面说明,惯例是以逆时针方式测量角度(正)X轴


小智 6

我还需要它来在代码中形成时钟指针的运动。我尝试了几个公式,但它们都不起作用,所以这就是我想出的:

  • 运动 - 顺时针
  • 点 - 每 6 度(因为 360 度除以 60 分是 6 度)
  • 手长 - 65 像素
  • 中心 - x=75,y=75

所以公式是

x=Cx+(r*cos(d/(180/PI))
y=Cy+(r*sin(d/(180/PI))
Run Code Online (Sandbox Code Playgroud)

其中 x 和 y 是圆周上的点,Cx 和 Cy 是中心的 x,y 坐标,r 是半径,d 是度数。


das*_*ght 5

当我将-360到360度的角度传递给Cos(角度)或Sin(角度)时,我得到的结果很奇怪。

我认为您的尝试不起作用的原因是您传递的角度是度数。在sincos三角函数预计弧度表示的角度,所以这些数字应该是从02*M_PI。对于d学位,您会通过M_PI*d/180.0M_PI是在math.h标头中定义的常量。

  • @Kyle“d”是从“0”到“360”或从“-180”到“180”(一个完整的圆),而不是从“-360”到“360”(两个完整的圆)。 (2认同)