Member 12137971 Ответов: 1

Как нарисовать дугу, которая идет от 0 градусов до 180, а его периметр равен 20 мм?


Как нарисовать дугу, которая идет от 0 градусов до 180, а его периметр равен 20 мм?

Картинка с пояснением[^]

Что я уже пробовал:

Graphics g = Graphics.FromImage(bmp);
g.PageUnit = GraphicsUnit.Millimeter;
Rectangle r = new Rectangle(0, 0, (int)(Math.Round((40 / 25.4) / (float)Math.PI * g.DpiX) * 2), (int)(Math.Round((40 / 25.4) / (float)Math.PI * g.DpiY) * 2));
g.DrawArc(Pens.Black, r, 0, 180);

Это то, что я пытался сделать до сих пор. Я пришел к такому выводу :

g.DrawLine(Pens.Black, 1, 1, 1, (float)Math.Round((2 / 25.4) * g.DpiY));


Этот код рисует линию длиной 2 мм. Но первая часть кода, которая должна работать хорошо, по какой-то причине не работает, и она отображает полукольцо больше, чем должно быть.

1 Ответов

Рейтинг:
2

alywaly

Я хотел бы использовать графический метод DrawArc и вызывать этот метод из переопределенного метода onpaint(объект painteventargs е)

частная пустота MyDrawArc(PaintEventArgs e)
{
// Создать перо.d
Ручка ручка = новая ручка(цвет.Черный, 22 года);

// координирует
int x = 100;
int y = 100;
int width = 200;
int height = 200;

// углы пуска и стреловидности
int startAngle = 0;
int sweepAngle = -180;

// Нарисуйте дугу на экране.
e.графика.Страница-ИНФОРМЕР = GraphicsUnit.Миллиметр;
e.графика.DrawArc(ручка, x, y, ширина, высота, startAngle, sweepAngle);
}