728x90
반응형
728x170
▶ Line.cs
using System;
using System.Drawing;
namespace TestProject
{
/// <summary>
/// 선
/// </summary>
public class Line
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 시작 포인트
/// </summary>
public Point StartPoint;
/// <summary>
/// 종료 포인트
/// </summary>
public Point EndPoint;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - Line(startPoint, endPoint)
/// <summary>
/// 생성자
/// </summary>
/// <param name="startPoint">시작 포인트</param>
/// <param name="endPoint">종료 포인트</param>
public Line(Point startPoint, Point endPoint)
{
this.StartPoint = startPoint;
this.EndPoint = endPoint;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 포인트 배열 구하기 - GetPointArray(count)
/// <summary>
/// 포인트 배열 구하기
/// </summary>
/// <param name="count">카운트</param>
/// <returns>포인트 배열</returns>
public Point[] GetPointArray(int count)
{
Point[] pointArray = new Point[count];
int yDifference = EndPoint.Y - StartPoint.Y, xdiff = EndPoint.X - StartPoint.X;
double slope = (double)(EndPoint.Y - StartPoint.Y) / (EndPoint.X - StartPoint.X);
double x, y;
--count;
for(double i = 0; i < count; i++)
{
y = slope == 0 ? 0 : yDifference * (i / count);
x = slope == 0 ? xdiff * (i / count) : y / slope;
pointArray[(int)i] = new Point((int)Math.Round(x) + StartPoint.X, (int)Math.Round(y) + StartPoint.Y);
}
pointArray[count] = EndPoint;
return pointArray;
}
#endregion
}
}
728x90
▶ MainForm.cs
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 시작 포인트
/// </summary>
private Point startPoint = new Point(100, 100);
/// <summary>
/// 종료 포인트
/// </summary>
private Point endPoint = new Point(600, 400);
/// <summary>
/// 포인트 카운트
/// </summary>
private int pointCount = 10;
/// <summary>
/// 포인트 리스트
/// </summary>
private List<Point> pointList;
/// <summary>
/// 직선 펜
/// </summary>
private Pen linePen = new Pen(Color.Blue, 3);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.pointList = new Line(this.startPoint, this.endPoint).GetPointArray(this.pointCount).ToList();
Paint += Form_Paint;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 폼 페인트시 처리하기 - Form_Paint(sender, e)
/// <summary>
/// 폼 페인트시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(this.linePen, this.startPoint, this.endPoint);
foreach(Point point in this.pointList)
{
FillPoint(e.Graphics, Brushes.Red, point, 5);
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 포인트 채우기 - FillPoint(graphics, brush, point, radius)
/// <summary>
/// 포인트 채우기
/// </summary>
/// <param name="graphics">그래픽스</param>
/// <param name="brush">브러시</param>
/// <param name="point">포인트</param>
/// <param name="radius">반경</param>
public void FillPoint(Graphics graphics, Brush brush, PointF point, float radius)
{
graphics.FillEllipse(brush, point.X - radius, point.Y - radius, 2 * radius, 2 * radius);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 숫자를 단어로 변환하기 (0) | 2021.08.26 |
---|---|
[C#/WINFORM] Button 클래스 : 권한 상승 필요 표시 버튼 사용하기 (0) | 2021.08.26 |
[C#/WINFORM] Screen 클래스 : PrimaryScreen 정적 속성을 사용해 기본 디스플레이 해상도 구하기 (0) | 2021.08.26 |
[C#/WINFORM] Color 구조체 : 혼합 색상 구하기 (0) | 2021.08.23 |
[C#/WINFORM] Panel 클래스 : 둥근 패널 사용하기 (0) | 2021.08.22 |
[C#/WINFORM] PrivateFontCollection 클래스 : AddMemoryFont 메소드를 사용해 바이트 배열에서 폰트 패밀리 추가하기 (0) | 2021.08.21 |
[C#/WINFORM] Image 클래스 : BASE64 문자열에서 이미지 구하기 (0) | 2021.08.20 |
[C#/WINFORM] Button 클래스 : FlatStyle/FlatAppearance 속성을 사용해 버튼 테두리 제거하기 (0) | 2021.08.19 |
[C#/WINFORM] Panel 클래스 : 패널에서 폼 드래그하기 (0) | 2021.08.19 |
[C#/WINFORM] Form 클래스 : 클라이언트 영역에서 폼 드래그하기 (0) | 2021.08.19 |
댓글을 달아 주세요