C#如何从屏幕中心向外动态绘制圆

时间:2018-11-07 18:00:08

标签: c# winforms draw geometry

所以这个想法是这样的: 我有一个输入,当用户输入一个值时,我想在屏幕上绘制圆圈(参见图片)。

我希望圆圈从屏幕中间开始,并且如果用户键入另一个值来相应地绘制圆圈。

我知道如何绘制,但是我不确定我要实现的数学是如何完成的。

P.S。如果用户输入的数字大于适合屏幕的数字,我编写了自动调整圆圈大小的代码,但是如果用户输入的数字小于该数字,我希望从中向外绘制圆圈。

C#,WinForms

enter image description here

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您正在寻找这样的东西:

var Start = Height / 2 - NumberOfCircles * CircleSize;

for (int i = 0; i < NumberOfCircles; i++)
{
    Draw(Start + (i * CircleSize));
}

PS::将变量CircleSize用作圆的实际大小以及一些空间,在函数Draw中,您可以管理圆的位置绘制

答案 1 :(得分:1)

最后这是非常简单的数学。假设

直径是100像素

圆圈之间的缓冲区是半半径(50像素)

屏幕的

宽度是800像素

屏幕的

高度为600像素

--Initial position:

first position: (width / 2, height / 2 - (circles-1) * (diameter + buffer) / 2))

--All subsequent positions:

next position: (previousposition.x, previousposition.y + diameter+ buffer) 

如果您输入1个圆圈,则为:

圆1:(400,300-(0 *(radius + buffer)/ 2/2 =(400,300)

如果您输入2个圆圈,则为:

圆1:(400,300-(1 *(radius + buffer)/ 2)=(400,225),圆2:(400,225 + 150)=(400,375)

如果输入3个圆圈,则为:

圆1:(400,300-2 *半径+缓冲区)/ 2 =(400,150),圆2:(400,150 + 150) =(400,300),第3圈:(400,300 + 150)=(400,450)

...等等。