查找矩形对象的周长和面积?(C#)

查找矩形对象的周长和面积?(C#),c#,oop,C#,Oop,我知道计算矩形面积的公式是长度*宽度,peremiter公式是2(长度)+2(宽度)。我的问题是,找到由其他物体组成的矩形物体的面积和周长的最有效方法是什么 我的代码片段: class Rectangle { public Line left { get; set; } public Line top { get; set; } public Line right { get; set; } public Line bottom { get; set; } public Rectangle(

我知道计算矩形面积的公式是长度*宽度,peremiter公式是2(长度)+2(宽度)。我的问题是,找到由其他物体组成的矩形物体的面积和周长的最有效方法是什么

我的代码片段:

class Rectangle
{

public Line left { get; set; }
public Line top { get; set; }
public Line right { get; set; }
public Line bottom { get; set; }

public Rectangle() : this(new Line(new Point(), new Point())) { }

public Rectangle(Line diaganol)
{
    Point beginningDiagonalPoint = diaganol.startPoint;
    Point endingDiagonalPoint = diaganol.endPoint;

    int begXC = beginningDiagonalPoint.xCoord;
    int begYC = beginningDiagonalPoint.yCoord;

    int endXC = endingDiagonalPoint.xCoord;
    int endYC = endingDiagonalPoint.yCoord;



    Point rightSideEnd = new Point(endXC, begYC);
    Point leftSideEnd = new Point(begXC, endYC);


    right = new Line(endingDiagonalPoint, rightSideEnd);
    left = new Line(beginningDiagonalPoint, leftSideEnd);
    top = new Line(leftSideEnd, endingDiagonalPoint);
    bottom = new Line(rightSideEnd, beginningDiagonalPoint);
}
}
我想写两种方法,一种是计算面积,另一种是计算周长,我应该如何处理对象

我知道我可以用xfinal-coord-xinitial-coord表示宽度,用yfinal-yinitial表示长度,但是有没有其他更好的方法来处理对象呢


谢谢您的周长将是四条线的长度之和。大概直线对象已经或将能够有一个长度方法


类似地,面积是右线或左线长度与顶线或底线长度的乘积。

您的周长将是四条线长度的总和。大概直线对象已经或将能够有一个长度方法


类似地,面积是右行或左行长度与顶行或底行长度的乘积。

矩形的面积始终为:

area = width * height
perimeter = width * 2 + height * 2
周界将始终是:

area = width * height
perimeter = width * 2 + height * 2

无论你如何计算宽度或高度,它总是一样的。

矩形的面积总是:

area = width * height
perimeter = width * 2 + height * 2
周界将始终是:

area = width * height
perimeter = width * 2 + height * 2
不管你如何达到宽度或高度,它都是一样的。

你的类构造函数定义了一个矩形,但是由于这些线是不受保护的,外部代码可能会将它们更改为平行四边形、其他四边形,或者仅仅是不相交的线

不过,您的方法是正确的——您的矩形类应该实现面积和周长方法,这是执行OOP时的“正确方法”

您不需要线来计算面积或周长,只需要原始对角线点。事实上,您根本不需要left/top/right/bottom,因此最好将它们设置为惰性初始化的只读属性

Area = Math.Abs( (Point1.X - Point2.X) * (Point1.Y - Point2.Y) )

Perimeter = (Math.Abs(Point1.X - Point2.X) + Math.Abs(Point1.Y - Point2.Y)) * 2
您的类构造函数定义了一个矩形,但由于这些线不受保护,外部代码可能会将它们更改为平行四边形、其他四边形或只是不相交的线

不过,您的方法是正确的——您的矩形类应该实现面积和周长方法,这是执行OOP时的“正确方法”

您不需要线来计算面积或周长,只需要原始对角线点。事实上,您根本不需要left/top/right/bottom,因此最好将它们设置为惰性初始化的只读属性

Area = Math.Abs( (Point1.X - Point2.X) * (Point1.Y - Point2.Y) )

Perimeter = (Math.Abs(Point1.X - Point2.X) + Math.Abs(Point1.Y - Point2.Y)) * 2
你的周长是(endXC-begXC)*2+(endYC-begYC)*2

您的区域是(endXC-begXC)*(endYC-begYC)

…假设点在点的x和y方向上排序(否则,将每个计算包含在abs中,例如abs(endXC-begXC)

如果可能要调用面积和周长,您可能需要计算它们并将其存储在init上

您的周长是(endXC-begXC)*2+(endYC-begYC)*2

您的区域是(endXC-begXC)*(endYC-begYC)

…假设点在点的x和y方向上排序(否则,将每个计算包含在abs中,例如abs(endXC-begXC)


如果可能会调用面积和周长,您可能希望计算并将其存储在init上。如果查看您的类,您在类的构造函数中浪费的时间将超过计算面积和周长所损失的时间。为什么要存储线?点更方便:

class Rectangle
{

public Point bottomLeft { get; set; }
public Point topRight { get; set; }
public int? area;
public int? perimeter;

public Rectangle() : this(new Line(new Point(), new Point())) { }

public Rectangle(Line diaganol)
{
    bottomLeft = diagonal.StartPoint;
    topRight = diagonal.EndPoint;
}

public int Area()
{
  if (area == null)
  {
     area = Math.Abs(diagonal.StartPoint.X - diagonal.EndPoint.X) *
            Math.Abs(diagonal.StartPoint.Y - diagonal.EndPoint.Y);
  } 
  return (int)area;
}
public int Perimeter()
{
  if (perimeter == null)
  {
     perimeter = Math.Abs(diagonal.StartPoint.X - diagonal.EndPoint.X) * 2 +
            Math.Abs(diagonal.StartPoint.Y - diagonal.EndPoint.Y) * 2;
  } 
  return (int)perimeter;
}
}

如果你看一看你的类,你在类的构造函数中浪费的时间比你计算面积和周长所损失的时间还要多。你为什么存储线?点更方便:

class Rectangle
{

public Point bottomLeft { get; set; }
public Point topRight { get; set; }
public int? area;
public int? perimeter;

public Rectangle() : this(new Line(new Point(), new Point())) { }

public Rectangle(Line diaganol)
{
    bottomLeft = diagonal.StartPoint;
    topRight = diagonal.EndPoint;
}

public int Area()
{
  if (area == null)
  {
     area = Math.Abs(diagonal.StartPoint.X - diagonal.EndPoint.X) *
            Math.Abs(diagonal.StartPoint.Y - diagonal.EndPoint.Y);
  } 
  return (int)area;
}
public int Perimeter()
{
  if (perimeter == null)
  {
     perimeter = Math.Abs(diagonal.StartPoint.X - diagonal.EndPoint.X) * 2 +
            Math.Abs(diagonal.StartPoint.Y - diagonal.EndPoint.Y) * 2;
  } 
  return (int)perimeter;
}
}

通过对角线定义四边形只能描述矩形通过对角线定义四边形只能描述矩形