Другие языки программирования и технологии

Как в C# создать круг с осями координат , и потом с помощью формулы линией изобразить угол?

Alb Albalb
Alb Albalb
152
//создаем объект для рисования
System.Drawing.Graphics formGraphics = this.CreateGraphics();
Pen p = new Pen(Color.Black, 1);
//рисуем оси координат
formGraphics.DrawLine(p, 10, formGraphics.VisibleClipBounds.Height - 10, 10, 10);
formGraphics.DrawLine(p, 10, formGraphics.VisibleClipBounds.Height - 10,
formGraphics.VisibleClipBounds.Width - 10, formGraphics.VisibleClipBounds.Height - 10);
//рисуем круг c диаметром 100
p.Color = Color.Red;
formGraphics.DrawEllipse(p, 10, 10, 100, 100);
// рисуем линию под 45 градусов
// перевод из радиан в градусы
double fi = (45 * Math.PI) / 180;
// y = k * x + b
// b = 0, k = tg(fi)
float y = (float)Math.Tan(fi);
formGraphics.DrawLine(p, 10, formGraphics.VisibleClipBounds.Height - 10,
formGraphics.VisibleClipBounds.Width, formGraphics.VisibleClipBounds.Height - y * formGraphics.VisibleClipBounds.Width);
ОБ
Олег Букин
394
Лучший ответ
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DoubleBuffered = true;
}

static Rectangle ApplyPadding(Rectangle rectangle, Padding padding)
{
var location = new Point(rectangle.Left + padding.Left, rectangle.Top + padding.Top);
var size = new Size(rectangle.Width - padding.Horizontal, rectangle.Height - padding.Vertical);

return new Rectangle(location, size);
}

static Rectangle MakeSquare(Rectangle rectangle)
{
var length = Math.Min(rectangle.Width, rectangle.Height);
var size = new Size(length, length);
return new Rectangle(rectangle.Location, size);
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

var padding = new Padding(30);
var rectangle = ApplyPadding(e.ClipRectangle, padding);
rectangle = MakeSquare(rectangle);

var fore_color = Color.Blue;
var back_color = Color.FromArgb(50, fore_color);
var line_color = Color.Black;

var graphics = e.Graphics;
graphics.Clear(Color.White);

using (var brush = new SolidBrush(back_color))
graphics.FillEllipse(brush, rectangle);

// Угол в градусах, но отсчитывается по часовой стрелке
using (var brush = new SolidBrush(fore_color))
graphics.FillPie(brush, rectangle, 0.0f, -36.0f);

using (var pen = new Pen(line_color))
graphics.DrawEllipse(pen, rectangle);
}

protected override void OnResize(System.EventArgs e)
{
base.OnResize(e);
Invalidate();
}
}
}

Похожие вопросы