Is there any way to create a perfect curve automatically without having to move the polygons manually?
You can use Relax function that comes with LoopTools add-on. The add-on comes with Blender so you just need to activate it in the User Preferences (ctrl+alt+u). The function is then accessible from Specials menu (w), LoopTools submenu. It can be used with edge loops selected. Note all the options in the t panel that you can change.
Space function might also be useful:
I'd suggest using fewer polygons and letting the subsurf modifier work for you. For example, I tried replicating your shape with fewer edge loops:
Sparser geometry should make it easier to manipulate your subsurf'd mesh into curved shapes manually. Additionally, for a "perfect", arbitrary, non-destructive curve, I'd suggest using the curve modifier. This way you can guide your mesh with a curve object, which is ideal for describing a smooth curve with few points.
For perfectly repeating geometry, you can couple this with an array modifier for maximum non-destructivity:
Or, to extrude to a specific curve:
- Draw your curve.. in its Data > Shape panel set its resolution to match the edge you're extruding from, bearing in mind resolution is per-segment.
- In Object Mode, Alt C convert the curve to a mesh
- You may have to tweak the number of, and/or space the vertices - Loop Tools > Space will do that
- Ctrl J Join the meshes
- Ctrl E Edge Menu > 'Bridge Edge Loops' (probably set to linear , with no profile influence)