问题描述
定义一个Circle类,其功能有:
-两个double类型属性X和Y,可读写圆心坐标
-一个double类型属性Radius,可读写圆的半径
-一个构造方法,以指定的x,y,radius来构造
-一个只读属性Area,获取圆面积
-一个只读属性Perimeter,获取圆周长
-一个方法bool Contains(double x, double y),如果指定的点(x, y)处于本圆内,返回true
-一个方法bool Contains(Circle circle),如果指定的圆circle包含在本圆内,返回true
-一个方法bool Extend(double range, out Circle newCircle),半径扩大(加上range),输出扩大后的newCircle,返回true。如果Radius+range为负,无法扩大,则输出原来的圆,且返回false。
在一个Main方法中对上述功能进行测试
解决方案
using System;
namespace HomeWork1
{
//定义一个Circle类,其功能有
class Circle
{
//-两个double类型属性X和Y,可读写圆心坐标
public double X
{
set;
get;
}
public double Y
{
set;
get;
}
//-一个double类型属性Radius,可读写圆的半径
public double Radius
{
set;
get;
}
//-一个构造方法,以指定的x,y,radius来构造
public Circle(double X, double Y, double Radius)
{
this.X = X;
this.Y = Y;
this.Radius = Radius;
}
//-一个只读属性Area,获取圆面积
public double Area
{
get {
return Radius * Radius * 3.1415926;
}
}
//-一个只读属性Perimeter,获取圆周长
public double Perimeter
{
get {
return 2 * Radius * 3.1415926;
}
}
//-如果指定的点(x, y)处于本圆内,返回true
public bool Contains(double x, double y) {
if ((x - X) * (x - X) + (y - Y)* (y - Y) < Radius * Radius) {
return true;
}
return false;
}
//-如果指定的圆circle包含在本圆内,返回true
public bool Contains(Circle circle) {
if (Radius>circle.Radius
&& (Radius - circle.Radius) * (Radius - circle.Radius) > (circle.X - X) * (circle.X - X) + (circle.Y - Y) * (circle.Y - Y))
{
return true;
}
return false;
}
//-半径扩大(加上range),输出扩大后的newCircle,返回true。如果Radius+range为负,无法扩大,则输出原来的圆,且返回false。
public bool Extend(double range, out Circle newCircle) {
newCircle = this;
if (newCircle.Radius + range > 0) {
newCircle.Radius = newCircle.Radius + range;
return true;
}
return false;
}
}
class Program
{
static void Main(string[] args)
{
Circle circle = new Circle(1,1,3);
Console.WriteLine("面积:{0}\t周长:{1}",circle.Area, circle.Perimeter);
Console.WriteLine("(2,2)在本圆内:{0}", circle.Contains(2,2));
Console.WriteLine("Circle(1,1,1)在本圆内:{0}", circle.Contains(new Circle(1,1,1)));
circle.Extend(2,out circle);
Console.WriteLine("面积:{0}\t周长:{1}", circle.Area, circle.Perimeter);
}
}
}