Randomizing a regular polygon along its "spokes" while maintaining area I have a 2d graphics question that seems like it'd fit better here than at stackoverflow.  Please forgive any breach of ettiquette as I am new to mathematics exchange.  I did search for a solution before posting this.
I am taking a regular polygon (of arbitrary n sides) and adding a random value (between 1 and -1) to the length of each "spoke" (ie. each circumradius line segment).  I'd like to shift the random values so that when they are added to the polygon's spokes, the polygon's area is the same as the original polygon's area.
I naively assumed that subtracting the total average of the values from each value (thus making the average of the values be 0) would do this, but this clearly does not work.

Here is an example of what I'd like to achieve:
I have an n=4 regular polygon (a square) with a circumradius of 1.  The area of this polygon is 2.  I also have a random value for each point of the polygon: (0.85, -0.75, 0.6, -0.4).  If I add these values to the "spokes" of the polygon then the resulting polygon has spokes of length (1.85, 0.25, 1.6, 0.6) and an area of:

1.85 * 0.25 * 0.5  +  0.25 * 1.6 * 0.5  +  1.6 * 0.6 * 0.5  +  0.6 * 1.85 * 0.5
1.46625

I'd like to shift the random values so that the resulting polygon has an area of 2 (ie. the original area).  If I reduce the values by their average of 0.075 then I get (0.775, -0.825, 0.525, -0.475). Adding these shifted values to the polygon results in a polygon with spokes of length (1.775, 0.175, 1.525, 0.525), which average out to 1.  The polygon's area is then:

1.775 * 0.175 * 0.5  +  0.175 * 1.525 * 0.5  +  1.525 * 0.525 * 0.5  +  0.525 * 1.775 * 0.5
1.155

So shifting to get an average of 0 does not work.  My question: What would I shift by instead so that the resulting polygon has the same area as the original polygon?

EDIT:
joriki provided a solid answer to this question that was akin to normalizing a vector.  Unfortunately, this technique involves calculating the area of the resulting polygon, which becomes a bottleneck in software implementation (I am solving this problem each frame for a number of regular polygons of n=64 each).  I can try to optimize the solution if this is the only option, but a less computationally expensive solution would be preferred.
 A: Compute the area of the randomized polygon and multiply all spoke lengths by the square root of the quotient of the desired area over the current area.
A: Take a look at this figure :

featuring 4 consecutive "spokes" $v_k:=\vec{OP_k}$ of a regular $n$-gon with angles $\alpha = \frac{2 \pi}{n}$. Let :
$$S:=\frac12 \sin \frac{2 \pi}{n}$$
Initial triangles $OP_kP_{k+1}$ have $S$ as their common area (formula "half of the product of lengths times the sine of the angle between them") 
New triangles have areas $a_ka_{k+1}S$. As a consequence, the relationship to be fulfilled is :
$$a_1a_2S+a_2a_3S+\cdots +a_{n-1}a_nS+a_na_{1}S=nS \ \ \iff$$ 
$$a_1a_2+a_2a_3+\cdots +a_{n-1}a_n+a_na_{1}=n\tag{1}$$ 
Which the necessary and sufficient condition for the  area to be preserved.
If this condition is not fulfilled and you want it to be fulfilled while preserving the general shape you have created, if the LHS of (1) is called $L$, here is the procedure :


*

*call $L$ the LHS of (1) (which is not equal to $n$) ;

*Compute $M=\sqrt{\dfrac{n}{L}]$ ; 

*Multiply each $a_k$ by $M$. **
Edit : Taking into consideration your notations
$$a_k=1+r_k \ \ \text{with} \ \ -1< r_k<1,$$ 
(1) becomes : 
$$n+2 \sum r_k+\sum r_k r_{k+1} = n  \ \ \iff $$
$$2 \sum r_k+\sum r_k r_{k+1} = 0\tag{2}$$
(convention $r_{n+1}=r_1$.)
