计算圆中点的位置

Joe*_*own 76 algorithm math geometry trigonometry

目前我对此有一点空白.我有一个问题,我需要计算中心点周围点的位置,假设它们距离中心和彼此都是等距的.

点的数量是可变的,所以DrawCirclePoints(int x) 我确信这是一个简单的解决方案,但对于我的生活,我只是看不到它:)

Bri*_*oll 79

给定半径长度r和弧度角度t以及圆心(h,k),您可以如下计算圆周上点的坐标(这是伪代码,您必须将其调整为您的语言):

float x = r*cos(t) + h;
float y = r*sin(t) + k;
Run Code Online (Sandbox Code Playgroud)

  • 我的数学学位以及其他所有答案都说你不对. (14认同)
  • 在屏幕坐标中,正y轴反转,因此这是有意义的. (3认同)
  • 嗯..好吧在瑞典维基百科它说罪是x轴我知道这不是安全的来源,但后来我在x和cos上使用了罪我的立方体开始向正确的方向移动.甚至我的数学老师指出我翻了他们.你能想到为什么我的立方体会以偏离目标位置的奇怪模式移动的任何其他原因然后我翻转它们移动到它的位置? (2认同)

Gar*_*han 64

圆心的角度θ为圆心,圆心(x0,y0)的半径r(x0 + r cos theta, y0 + r sin theta).现在选择theta均匀分布在0到2pi之间的值.

  • (当然,无论你喜欢怎样写角度,pi的值都是3.14.它就是它.) (5认同)

Dan*_*röm 48

这是使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

样本输出来自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}
Run Code Online (Sandbox Code Playgroud)

祝好运!


sco*_*yab 9

使用上述答案之一作为基础,这是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
}
Run Code Online (Sandbox Code Playgroud)


小智 7

在圆形路径中放置一个数字

// 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);
}
Run Code Online (Sandbox Code Playgroud)