問題描述
定義一個Circle類,其功能有:
1)兩個double類型屬性X和Y,可讀寫圓心座標
2)一個double類型屬性Radius,可讀寫圓的半徑
3)一個構造方法,以指定的x,y,radius來構造
4)一個只讀屬性Area,獲取圓面積
5)一個只讀屬性Perimeter,獲取圓周長
6)一個方法bool Contains(double x, double y),如果指定的點(x, y)處於本圓內,返回true
7)一個方法bool Contains(Circle circle),如果指定的圓circle包含在本圓內,返回true
8)一個方法bool Extend(double range, out Circle newCircle),半徑擴大(加上range),輸出擴大後的newCircle,返回true。如果Radius+range爲負,無法擴大,則輸出原來的圓,且返回false。
在一個Main方法中對上述功能進行測試
添加一個Ellipse(橢圓)類:
1)X, Y, MajorRadius, MinorRadius屬性
2)至少兩個Ellipse構造方法,一個調用另一個
3)只讀屬性Area
4)實例方法bool Contains(double x, double y)
5)實例方法string ToString()
6)讓Circle類繼承Ellipse類,將其中的重複代碼刪去
7)在MajorRadius, MinorRadius屬性的set訪問器中,對value進行檢查,如果value<=0,拋出異常(throw new ArgumentException("主軸長度不能爲負");),並保證MajorRadius>=MinorRadius
在一個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);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Homework4
{
/**
* 添加一個Ellipse(橢圓)類:
* 1)X, Y, MajorRadius, MinorRadius屬性
* 2)至少兩個Ellipse構造方法,一個調用另一個
* 3)只讀屬性Area
* 4)實例方法bool Contains(double x, double y)
* 5)實例方法string ToString()
* 6)讓Circle類繼承Ellipse類,將其中的重複代碼刪去
* 7)在MajorRadius, MinorRadius屬性的set訪問器中,
* 對value進行檢查,如果value<=0,拋出異常(throw new ArgumentException("主軸長度不能爲負");),
* 並保證MajorRadius>=MinorRadius
*/
class Ellipse {
//-兩個double類型屬性X和Y,可讀寫圓心座標
public double X
{
set;
get;
}
public double Y
{
set;
get;
}
private double majorRadius
{
set;
get;
}
private double minorRadius
{
set;
get;
}
public double MajorRadius
{
set {
if (value < 0) {
throw new ArgumentException("主軸長度不能爲負");
}
majorRadius = value;
}
get {
return majorRadius;
}
}
public double MinorRadius
{
set
{
if (value > MajorRadius)
{
throw new ArgumentException("主軸長度不能爲負");
}
minorRadius = value;
}
get
{
return minorRadius;
}
}
//一個只讀屬性Area,獲取橢圓面積
public double Area {
get { return X * Y * Math.PI; }
}
public Ellipse():this(1,2) {
}
public Ellipse(double x,double y) {
}
//-如果指定的點(x, y)處於橢圓內,返回true
public bool Contains(double x, double y) {
if ((x - X) * (x - X) * MinorRadius * MinorRadius + (y - Y) * (y - Y) * MajorRadius * MajorRadius
< MajorRadius * MajorRadius * MinorRadius * MinorRadius)
{
return true;
}
return false;
}
public string ToString() {
return "Ellipse{"+
"X: " + X + " " +
"Y: " + Y + " " +
"MajorRadius: " + MajorRadius + " " +
"MinorRadius: " + MinorRadius + " " +
"}";
}
}
class Circle:Ellipse
{
//-一個double類型屬性Radius,可讀寫圓的半徑
public double Radius
{
set {
MinorRadius = MajorRadius = value;
}
get { return MajorRadius; }
}
//-一個構造方法,以指定的x,y,radius來構造
public Circle(double X, double Y, double Radius)
{
this.X = X;
this.Y = Y;
this.Radius = Radius;
}
//-
//-一個只讀屬性Perimeter,獲取圓周長
public double Perimeter
{
get
{
return 2 * Radius * Math.PI;
}
}
//-如果指定的圓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;
}
public string ToString()
{
return "Circle{" +
"X: " + X + " " +
"Y: " + Y + " " +
"Radius: " + Radius + " " +
"}";
}
}
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(circle.ToString());
Console.WriteLine("面積:{0}\t周長:{1}", circle.Area, circle.Perimeter);
}
}
}
運行結果
參考文章
https://blog.csdn.net/pengpengblog/article/details/53213454
https://shentuzhigang.blog.csdn.net/article/details/104880342