C # Как рисовать круги от центра экрана наружу динамически - PullRequest
0 голосов
/ 07 ноября 2018

Итак, идея заключается в следующем: У меня есть вход, так как пользователь вводит значение, которое я хочу нарисовать на экране круги (см. Рисунок).

Я хочу, чтобы круги начинались с середины экрана, и если пользователь вводит другое значение, чтобы заново нарисовать круги соответственно.

Я знаю, как рисовать, но я не совсем уверен, как делается математика для того, чего я хочу достичь.

P.S. Я написал код для автоматического определения размера кругов, если пользователь вводит больше, чем число, которое соответствует экрану, но если он вводит меньше, чем я, я хочу, чтобы круги рисовались с середины наружу.

C #, WinForms

enter image description here

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

В конце концов, это довольно простая математика. Предположим,

диаметр равен 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 * (радиус + буфер) / 2 = (400, 300)

Если вы введете 2 круга, это будет:

кружок 1: (400, 300 - (1 * (радиус + буфер) / 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)

... и т. Д.

0 голосов
/ 07 ноября 2018

Если я правильно понял, вы ищете что-то вроде этого:

var Start = Height / 2 - NumberOfCircles * CircleSize;

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

PS: Используйте переменную CircleSize для фактического размера круга плюс некоторое пространство, а в функции Draw вы можете указать, где будет нарисован круг

...