HW3

단국대학교 멀티미디어공학전공 HCI프로그래밍2 (2015년 가을학기) 실습

날짜: 2015년 10월 30일

 

– 실습번호 : lab-03 (Due by 11/17)

– 실습제목 : collections, class, FileIO, LINQ

– 실습요약 : 평면 도형의 점들 입력 값으로 도형 판별하기 및 영역과 둘레 계산하기 및 쿼리

– 준비자료 : https://www.mathsisfun.com/geometry/quadrilaterals-interactive.html

 

– 실습문제

public enum FigureType // FigureType 판별
{
Triangle,
EquilateralTriangle,
IsoscelesTriangle,
ScaleneTriangle,
Quadrilateral,
Square,
Rectangle,
Parallelogram,
Rhombus,
Trapezoid,
None
}

 

  1. Point 클래스를 작성한다.

+ public int X { get;  set; }

+ public int Y { get;  set; }

+ public static implicit operator System.Drawing.Point(Point p) {

Return new System.Drawing.Point(p.x, p.y);

}

 

  1. Figure 추상클래스를 상속 받아 Triangle, Quadrilateral 클래스를 작성한다.

public class FigureTypeResolver : JavaScriptTypeResolver // JSON serialization & deserialization
{
public override Type ResolveType(string id)
{
return Type.GetType(id);
}

public override string ResolveTypeId(Type type)
{
if (type == null)
{
throw new ArgumentNullException(“type”);
}

return type.FullName;
}
}

public class FigureBound // TopLeft Point(X,Y) & Width & Height
{
public int X
{
set;
get;
}

public int Y
{
set;
get;
}

public int Width
{
set;
get;
}

public int Height
{
set;
get;
}

public FigureBound() : this (0, 0, 10, 10)
{
}

public FigureBound(int x, int y, int width, int height)
{
Set(x, y, width, height);
}

public void Set(int x, int y, int width, int height)
{
this.X = x;
this.Y = y;
this.Width = width;
this.Height = height;
}
public override string ToString() { return (String.Format(“({0}, {1}, {2}, {3})”, X, Y, Width, Height)); } // ToString method override
}

public abstract class Figure // Figure 추상 클래스
{
public ConsoleColor Color
{
get;
set;
}

protected List<Point> vertices = null;
public List<Point> Vertices // Use Point.cs (Not System.Drawing.Point) for JSON
{
get
{
return vertices;
}
set
{
vertices = value;
UpdateBounds(); // 새 정점에 따른 바운딩박스 계산
UpdateSides(); // 새 정점에 따른 변들 계산
UpdateAngles(); // 새 정점에 따른 내각들 계산
}
}

public FigureBound Bounds = new FigureBound(); // 바운딩박스

public List<double> Sides // 변
{
get;
set;
}

public List<double> Angles // 내각 (radian)
{
get;
set;
}

public abstract void UpdateBounds();
public abstract void UpdateSides();
public abstract void UpdateAngles();

public void Draw(Graphics g) { // 도형 그리기

Brush b = new

SolidBrush(System.Drawing.Color.FromName(this.Color.ToString())));

System.Drawing.Point[] points = Array.ConvertAll(Vertices.ToArray(),

x => (System.Drawing.Point)x);

g.FillPolygon(b, points);

}

}

 

  1. FigureCalculator 클래스는 도형의 점들 입력 값으로부터 도형의 판별 및 도형의 면적과 둘레 계산을 담당한다.

+ public void GetUserInputFigure() // 사용자로부터 도형의 점을 입력 (3점과 4점만 입력 받도록 함) (optional)

+ public FigureType GetFigureType() // 무슨 도형인지 판별 (정삼각형, 이등변삼각형, 부등변삼각형 또는 정사각형, 직사각형, 평행사변형, 마름모, 사다리꼴 등)

+ public double Area(FigureType type, Figure figure) // 도형의 면적 계산

+ public double Perimeter(FigureType type, Figure figure) // 도형의 둘레 계산

 

  1. FigureManager 클래스는 File IO 입출력을 담당한다.

+ JSON을 이용한 파일 입출력 (JSON 형태로 저장한 도형의 리스트를 figureList에 import & 사용자가 추가로 입력한 도형의 정보를 포함하는 figureList를 파일로 export)

 

  1. FigureManager클래스 또는 Program 클래스의 Main 함수에서 본인이 더 테스트해보고 싶은 Method를 추가하라. 디렉토리에 여러 개의 데이터를 읽어서, 여러 가지 방법으로 정렬 및 LINQ 쿼리를 한 후 새로운 파일에 저장한다. 등등. 실행 화면과 코드를 첨부하시오.

+ List<Figure> figureList = new List<Figure>(); // 도형의 리스트

// LINQ를 이용하여 리스트에서 사다리꼴(Trapezoid)만 List로 추출

– public IList<Figure> GetTrapezoid () { // 내부구현 필요 – LINQ ToList() 사용 }

// LINQ를 이용하여 리스트에서 지정한 영역 값보다 작은 도형만 List로 추출

– public IList<Figure> GetFigureAreaLessThan(double area) { // 내부구현 필요 – LINQ ToList() 사용 }

 

Leave a Reply

Your email address will not be published. Required fields are marked *