I have some delegates and a method:
delegate Point Translate(Point p);
delegate Translate Transform(Translate t);
Translate forward = p => new Point(p.X + 1, p.Y);
Question: How can I implement a method like this:
Transform Rotate90 = ??
So that Rotate90 rotates any Translate function 90 clockwise. So:
Point startPoint = new Point(1, 1);
Point endPoint = (Rotate90(forward))(startPoint);
//desired output: Point(1, 0)
EDIT 1:
I'm not going to apply Translate functions one by one on a point. What I need is to apply some transformed functions (Translate function that have been rotated or reflexed) on a point.
WHAT I NEED: How can I write a Rotate90 which if I pass it (p=>new Point(p.X+1, p.y)) it returns me a function with the same effect as (p=>new Point(p.X, p.Y-1)).
EDIT 2: Some examples:
Translate forward = p => new Point(p.X + 1, p.Y);
Translate backward = p => new Point(p.X - 1, p.Y);
Translate downward = p => new Point(p.X, p.Y - 1);
Translate runningForward = p => new Point(p.X + 5, p.Y);
Transform Rotate90Cw = ??
Point samplePoint = new Point(1, 1);
Point p1 = (Rotate90Cw(forward))(samplePoint); //must be (1,0)
Point p2 = (Rotate90Cw(backward))(samplePoint); //must be (1,2)
Point p3 = (Rotate90Cw(downward))(samplePoint); //must be (0,1)
Point p4 = (Rotate90Cw(runningForward))(samplePoint); //must be (1,-4)
Point p4 = (Rotate90Cw(Rotate90Cw(forward)))(samplePoint); //must be (0,1)
I need a single
Rotate90Cwfunction that can be applied on anyTranslatefunction and returns a properTranslatefunction. So the effect of applyingRotate90Cw(forward)on a point would be the same as applyingdownwardon a point. And so on...
I'm not going to make a separate Rotate function for every case (e.g. forwardRotated, downwardRotated and ...