data Shape = ...
| Polygon [Vertex]
...
type Vertex = (Float, Float)
rectangle :: Float -> Float -> Shape
rectangle s1 s2 = Polygon [(x, y), (-x, y), (-x, -y), (x, -y)]
where x = s1 / 2
y = s2 / 2
rtTriangle :: Float -> Float -> Shape
rtTriangle s1 s2 = Polygon [(0, 0), (s1, 0), (0, s2)] |

data Shape = ...
| Polygon [Vertex]
...
type Vertex = (Float, Float)
rectangle :: Float -> Float -> Shape
rectangle s1 s2 = Polygon [(x, y), (-x, y), (-x, -y), (x, -y)]
where x = s1 / 2
y = s2 / 2
rtTriangle :: Float -> Float -> Shape
rtTriangle s1 s2 = Polygon [(0, 0), (s1, 0), (0, s2)]

My rectangle is centred on the origin, with vertices in anticlockwise order, to match up with what’s coming in future chapters and exercises.

This entry was posted on Tuesday, July 24th, 2007 at 10:22 pm and is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.

[…] Note that the vertex list is in anticlockwise order. This is also the case with Exercise 2.1. […]

My solution was similar (didn’t bother with centering on origin), however I declared the parameter types (is that the right term in Haskell?) as Side, not Float … i.e. rectangle :: Side -> Side -> Shape

In my point of view, it is clockwise!

Howard, I don’t think “rectangle :: Side -> Side -> Shape” is correct because Vertex is defined as “(Float, Float)”.

Howard is correct, “rectangle :: Side -> Side -> Shape” matches the data definition, as Rectangle doesn’t take a tuple.

But Rectangle is not the constructor that the exercise wants you to use. The exercise asks you to make a rectangle using the Polygon constructor, which takes a list of vertices. You could make a rectangle with two vertices if they are diagonal. Perhaps it would be helpful to reproduce the exercise that is being solved, to avoid confusion.

The definition of a rectangle does not require that one side be parallel to the y axis. Wikipedia : In Euclidean plane geometry, a rectangle is any quadrilateral with four right angles. The text does not seem to consider rotated shapes as belonging to the Shape type.