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)
Gar*_*han 64
圆心的角度θ为圆心,圆心(x0,y0)的半径r为(x0 + r cos theta, y0 + r sin theta).现在选择theta均匀分布在0到2pi之间的值.
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)
祝好运!
使用上述答案之一作为基础,这是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)