2009-12-02 32 views
0

我知道查找矩形区域的公式只是长度*宽度,而peremiter公式是2(长度)+ 2(宽度)。我的问题是,找到由其他对象组成的矩形对象的区域和边界的最有效方法是什么?查找矩形对象的周长和面积? (C#)

我的代码段:

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); 
} 
} 

我要写两种方法,一种计算面积,一到caclulate周边,我应该怎么跟对象接近呢?

我知道我可以将xfinal坐标 - xinitial坐标转换为宽度,yfinal - yinitial作为长度,但有没有另外一种方法和/或更好的方法来处理对象?

谢谢!

回答

0

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

你的面积(endXC - begXC)*(endYC - begYC)

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

如果可能调用区域和周长,则可能需要计算&将它们存储在init

0

你的周长是四大行的长度的总和。据推测,Line对象具有或将能够具有长度方法。

同样,该区域是右边或左边以及顶部或底部线的长度的乘积。

2

一个长方形的面积将永远是:

area = width * height 

周界永远是:

perimeter = width * 2 + height * 2 

不要紧,你如何在宽度或高度到达,它总是会一样。

1

您的课程构造函数定义了一个矩形,但由于行不受保护,外部代码可能会将它们更改为平行四边形,其他四边形或仅为不相交的行。

你在正确的轨道上,但 - 你的Rectangle类应该实现面积和周长的方法,这就是“正确的方式”实现面向对象编程的时候。

你不需要线来计算面积或周长,你只需要原始的对角点。实际上,根本不需要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 
+0

通过其对角线定义四边形只能描述一个矩形 –

0

如果你看看你的班级,那么你会在课程的构造函数中浪费更多的时间,而不是计算面积和周长。你为什么要存储行?点更方便:

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; 
} 
}