using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
enum ShapeColor { 红色, 绿色, 蓝色, 青色, 品红, 黄色, 黑色 }
interface IDrawable
{
void Draw();
}
public class ShapeComparer : IComparer
{
int Type;
public ShapeComparer(int Type)
{
this.Type = Type;
}
public int Compare(object a, object b)
{
if(Type==0) //根据x排序
{
if (((Shape)a).CenterX > ((Shape)b).CenterX)
return 1;
else if (((Shape)a).CenterX < ((Shape)b).CenterX)
{
return -1;
}
else
return 0;
}
else if(Type==1) //根据y排序
{
if (((Shape)a).CenterY > ((Shape)b).CenterY)
return 1;
else if (((Shape)a).CenterY < ((Shape)b).CenterY)
{
return -1;
}
else
return 0;
}
else if(Type==2) //根据面积
{
if (((Shape)a).Area > ((Shape)b).Area)
return 1;
else if (((Shape)a).Area < ((Shape)b).Area)
{
return -1;
}
else
return 0;
}
else //根据周长
{
if (((Shape)a).Perimeter > ((Shape)b).Perimeter)
return 1;
else if (((Shape)a).Perimeter < ((Shape)b).Perimeter)
{
return -1;
}
else
return 0;
}
}
}
abstract class Shape:IDrawable, IComparable
{
public double CenterX, CenterY, RadiusLong, RadiusShort;
public int CompareTo(object o)
{
if (RadiusLong > ((Shape)o).RadiusLong)
return 1;
else if (RadiusLong == ((Shape)o).RadiusLong)
return 0;
else
return -1;
}
public int Type;
public void Draw()
{
if (Type == 0)
System.Console.WriteLine($"用{LineColor}画圆形:圆心在({CenterX}, {CenterY}),半径为{RadiusLong}");
else
System.Console.WriteLine($"用{LineColor}画椭圆:圆心在({CenterX}, {CenterY}),长短半轴为({RadiusLong}, {RadiusShort})");
}
public Shape(ShapeColor color, double CenterX, double CenterY, double RadiusLong, double RadiusShort, int Type)
{
LineColor = color;
this.CenterX = CenterX;
this.CenterY = CenterY;
this.Type = Type;
if (Type == 0)
this.RadiusLong = this.RadiusShort = RadiusShort;
else
this.RadiusLong = Math.Max(RadiusShort, RadiusLong); this.RadiusShort = Math.Min(RadiusLong, RadiusShort);
}
public double Area
{
get { return Math.PI * RadiusLong * RadiusShort; }
}
public double Perimeter
{
get { return 2 * Math.PI * RadiusShort + 4 * (RadiusLong - RadiusShort); }
}
public ShapeColor LineColor { get; set; }
}
class Ellipse :Shape
{
public Ellipse(ShapeColor color, double x, double y, double RL, double RS, int t) : base(color, x, y, RL, RS, t) { }
}
class Program
{
static void Main(string[] args)
{
Random rd = new Random();
Shape[] arrs = new Shape[10];
for(int i=0;i<10;i++)
{
arrs[i] = new Ellipse((ShapeColor)rd.Next(0, 7), rd.NextDouble() * 10, rd.NextDouble() * 10, rd.NextDouble() * 10, rd.NextDouble() * 10, rd.Next(0, 2));
}
Array.Sort(arrs);
for(int i=0;i<10;i++)
{
arrs[i].Draw();
}
Array.Sort(arrs, new ShapeComparer(1));//按Y坐标进行排序
System.Console.ReadKey();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQ7CgplbnVtIFNoYXBlQ29sb3IgeyDnuqLoibIsIOe7v+iJsiwg6JOd6ImyLCDpnZLoibIsIOWTgee6oiwg6buE6ImyLCDpu5HoibIgfQppbnRlcmZhY2UgSURyYXdhYmxlCnsKICAgICB2b2lkIERyYXcoKTsKfQoKcHVibGljIGNsYXNzIFNoYXBlQ29tcGFyZXIgOiBJQ29tcGFyZXIKewogICAgaW50IFR5cGU7CiAgICBwdWJsaWMgU2hhcGVDb21wYXJlcihpbnQgVHlwZSkKICAgIHsKICAgICAgICB0aGlzLlR5cGUgPSBUeXBlOwogICAgfQogICBwdWJsaWMgIGludCBDb21wYXJlKG9iamVjdCBhLCBvYmplY3QgYikKICAgIHsKICAgICAgICAgaWYoVHlwZT09MCkgLy/moLnmja545o6S5bqPCiAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCgoU2hhcGUpYSkuQ2VudGVyWCA+ICgoU2hhcGUpYikuQ2VudGVyWCkKICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgZWxzZSBpZiAoKChTaGFwZSlhKS5DZW50ZXJYIDwgKChTaGFwZSliKS5DZW50ZXJYKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZihUeXBlPT0xKSAvL+agueaNrnnmjpLluo8KICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoKChTaGFwZSlhKS5DZW50ZXJZID4gKChTaGFwZSliKS5DZW50ZXJZKQogICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICBlbHNlIGlmICgoKFNoYXBlKWEpLkNlbnRlclkgPCAoKFNoYXBlKWIpLkNlbnRlclkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmKFR5cGU9PTIpIC8v5qC55o2u6Z2i56evCiAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCgoU2hhcGUpYSkuQXJlYSA+ICgoU2hhcGUpYikuQXJlYSkKICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgZWxzZSBpZiAoKChTaGFwZSlhKS5BcmVhIDwgKChTaGFwZSliKS5BcmVhKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSAvL+agueaNruWRqOmVvwogICAgICAgICAgewogICAgICAgICAgICAgIGlmICgoKFNoYXBlKWEpLlBlcmltZXRlciA+ICgoU2hhcGUpYikuUGVyaW1ldGVyKQogICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICBlbHNlIGlmICgoKFNoYXBlKWEpLlBlcmltZXRlciA8ICgoU2hhcGUpYikuUGVyaW1ldGVyKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgfQp9CgoKYWJzdHJhY3QgY2xhc3MgU2hhcGU6SURyYXdhYmxlLCBJQ29tcGFyYWJsZQp7CiAgICBwdWJsaWMgZG91YmxlIENlbnRlclgsIENlbnRlclksIFJhZGl1c0xvbmcsIFJhZGl1c1Nob3J0OwogICAgcHVibGljICBpbnQgQ29tcGFyZVRvKG9iamVjdCBvKQogICAgeyAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChSYWRpdXNMb25nID4gKChTaGFwZSlvKS5SYWRpdXNMb25nKQogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIGVsc2UgaWYgKFJhZGl1c0xvbmcgPT0gKChTaGFwZSlvKS5SYWRpdXNMb25nKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgCiAgICB9CiAgICBwdWJsaWMgaW50IFR5cGU7CiAgICBwdWJsaWMgdm9pZCBEcmF3KCkKICAgIHsKICAgICAgICBpZiAoVHlwZSA9PSAwKQogICAgICAgICAgICBTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoJCLnlKh7TGluZUNvbG9yfeeUu+WchuW9ou+8muWchuW/g+WcqCh7Q2VudGVyWH0sIHtDZW50ZXJZfSnvvIzljYrlvoTkuLp7UmFkaXVzTG9uZ30iKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZSgkIueUqHtMaW5lQ29sb3J955S75qSt5ZyG77ya5ZyG5b+D5ZyoKHtDZW50ZXJYfSwge0NlbnRlcll9Ke+8jOmVv+efreWNiui9tOS4uih7UmFkaXVzTG9uZ30sIHtSYWRpdXNTaG9ydH0pIik7CgogICAgfQogICAgcHVibGljIFNoYXBlKFNoYXBlQ29sb3IgY29sb3IsIGRvdWJsZSBDZW50ZXJYLCBkb3VibGUgQ2VudGVyWSwgZG91YmxlIFJhZGl1c0xvbmcsIGRvdWJsZSBSYWRpdXNTaG9ydCwgaW50IFR5cGUpCiAgICB7CiAgICAgICAgTGluZUNvbG9yID0gY29sb3I7CiAgICAgICAgdGhpcy5DZW50ZXJYID0gQ2VudGVyWDsKICAgICAgICB0aGlzLkNlbnRlclkgPSBDZW50ZXJZOwogICAgICAgIHRoaXMuVHlwZSA9IFR5cGU7CiAgICAgICAgaWYgKFR5cGUgPT0gMCkKICAgICAgICAgICAgdGhpcy5SYWRpdXNMb25nID0gdGhpcy5SYWRpdXNTaG9ydCA9IFJhZGl1c1Nob3J0OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhpcy5SYWRpdXNMb25nID0gTWF0aC5NYXgoUmFkaXVzU2hvcnQsIFJhZGl1c0xvbmcpOyB0aGlzLlJhZGl1c1Nob3J0ID0gTWF0aC5NaW4oUmFkaXVzTG9uZywgUmFkaXVzU2hvcnQpOwogICAgfQogICAgcHVibGljIGRvdWJsZSBBcmVhCiAgICB7CiAgICAgICAgZ2V0IHsgcmV0dXJuIE1hdGguUEkgKiBSYWRpdXNMb25nICogUmFkaXVzU2hvcnQ7IH0KICAgIH0KICAgIHB1YmxpYyBkb3VibGUgUGVyaW1ldGVyCiAgICB7CiAgICAgICAgZ2V0IHsgcmV0dXJuIDIgKiBNYXRoLlBJICogUmFkaXVzU2hvcnQgKyA0ICogKFJhZGl1c0xvbmcgLSBSYWRpdXNTaG9ydCk7IH0KICAgIH0KICAgIHB1YmxpYyBTaGFwZUNvbG9yIExpbmVDb2xvciB7IGdldDsgc2V0OyB9Cn0KCgpjbGFzcyBFbGxpcHNlIDpTaGFwZQp7ICAgICAgICAgICAKICAgIHB1YmxpYyBFbGxpcHNlKFNoYXBlQ29sb3IgY29sb3IsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIFJMLCBkb3VibGUgUlMsIGludCB0KSA6IGJhc2UoY29sb3IsIHgsIHksIFJMLCBSUywgdCkgeyB9Cn0KCmNsYXNzIFByb2dyYW0KewogICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIFJhbmRvbSByZCA9IG5ldyBSYW5kb20oKTsKICAgICAgICBTaGFwZVtdIGFycnMgPSBuZXcgU2hhcGVbMTBdOwogICAgICAgIGZvcihpbnQgaT0wO2k8MTA7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgYXJyc1tpXSA9IG5ldyBFbGxpcHNlKChTaGFwZUNvbG9yKXJkLk5leHQoMCwgNyksIHJkLk5leHREb3VibGUoKSAqIDEwLCByZC5OZXh0RG91YmxlKCkgKiAxMCwgcmQuTmV4dERvdWJsZSgpICogMTAsIHJkLk5leHREb3VibGUoKSAqIDEwLCByZC5OZXh0KDAsIDIpKTsKICAgICAgICB9CiAgICAgICAgQXJyYXkuU29ydChhcnJzKTsKICAgICAgICBmb3IoaW50IGk9MDtpPDEwO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGFycnNbaV0uRHJhdygpOwogICAgICAgIH0KICAgICAgICBBcnJheS5Tb3J0KGFycnMsIG5ldyBTaGFwZUNvbXBhcmVyKDEpKTsvL+aMiVnlnZDmoIfov5vooYzmjpLluo8KICAgICAgICBTeXN0ZW0uQ29uc29sZS5SZWFkS2V5KCk7CiAgICB9Cn0K
用红色画椭圆:圆心在(6.12592910236024, 9.74948341015237),长短半轴为(2.61966875876285, 0.356117491776178)
用品红画椭圆:圆心在(8.12488428695355, 1.72670178195774),长短半轴为(4.4058599809212, 4.40212688613782)
用绿色画圆形:圆心在(9.58758796080369, 4.7557863848078),半径为4.64485788468498
用黑色画圆形:圆心在(9.71539222622076, 8.69980688611968),半径为5.14293387306059
用品红画椭圆:圆心在(2.94806713375639, 0.448584347240899),长短半轴为(5.54093919021121, 3.213630273572)
用蓝色画椭圆:圆心在(9.5345923814618, 9.00718993461094),长短半轴为(6.93360322012268, 0.722116395236047)
用黄色画圆形:圆心在(9.05100854069507, 5.87829523993577),半径为7.28133565153989
用蓝色画椭圆:圆心在(7.72991999878079, 9.75711855560407),长短半轴为(7.72606820693522, 6.50920364377517)
用绿色画椭圆:圆心在(1.49293672362945, 8.03865692021263),长短半轴为(7.97429923805143, 1.66086334346834)
用绿色画椭圆:圆心在(5.69395975009257, 3.2331349063819),长短半轴为(9.24725451471622, 2.10577183501132)