What software programs are used to draw physics diagrams, and what are their relative merits? Undoubtedly, people use a variety of programs to draw diagrams for physics, but I am not familiar with many of them.  I usually hand-draw things in GIMP which is powerful in some regards, but it is time consuming to do things like draw circles or arrows because I make them from more primitive tools.  It is also difficult to be precise.  
I know some people use LaTeX, but I am not quite sure how versatile or easy it is.  The only other tools I know are Microsoft Paint and the tools built into Microsoft Office.
So, which tools are commonly used by physicists?  What are their good and bad points (features, ease of use, portability, etc.)?
I am looking for a tool with high flexibility and minimal learning curve/development time.  While I would like to hand-draw and drag-and-drop pre-made shapes, I also want to specify the exact locations of curves and shapes with equations when I need better precision. Moreover, minimal programming functionality would be nice additional feature (i.e. the ability to run through a loop that draws a series of lines with a varying parameter).
Please recommend few pieces of softwares if they are good for different situations.
 A: Related post in SO.
My personal favorite is Asymtpote which is like MetaPost on steroids. A gallery is here.
A: Sometimes raster graphics is also necessary. I often used POV-Ray to make some illustrations. 

It may be prepared with any size using the same script with description of the picture, that avoid scaling problem. But it is not a graphical editor and fast only for preparation of simple pictures.
A: Just for completeness, I'll leave this here:  
It's always possible to compose your illustrations in raw postscript!  Postscript is itself a Forth-like programming language.  It's particularly useful for illustrations that lend themselves to being generated procedurally.  If postscript itself is too low-level, one can often write a script in some other language that outputs a postscript program.
One superb introduction to producing drawings in raw postscript is this free book: 


*

*Mathematical Illustrations by Bill Casselman.



A: For drawing Feynman diagrams with SVG, I have developed jQuery.Feyn to make it easier (see the screenshot below). 

A: I've recently been introduced to GeoGebra, and while I haven't yet had the opportunity to use for any work, I love the interface. For geometrical diagrams it looks spectacular.
I've also used XFig and gnuplot extensively. Particularly if you use $\LaTeX$, these tools serve their purpose very very well.
A: I've had good experiences with Inkscape.  It has a GUI interface, but allows you to enter coordinates directly if you want, and it's scriptable.  There is a plug-in that allows you to enter LaTeX directly (for labels and such).  The downside is that it is very much still in development, so sometimes you find that a feature you want is not completely implemented yet.  
As an example, here is a poster I made last week, entirely within Inkscape:

Inkscape now also has the "JessyInk" plug-in which allows you to use it to make presentations (à la Powerpoint).  The presentation can be viewed in a web browser as SVG, or exported to PDF.
If you have a Mac and don't mind spending some money ($100), I've heard good things about OmniGraffle.
A: I'm learning TikZ (a drawing package for LaTeX) as we speak. It's good for two-dimensional line drawings, the syntax for specifying shapes and curves is extremely versatile, but the learning curve is steeper than LaTeX even.
There is a superb gallery of TikZ examples.
Here is another collection of neat TikZ examples on SE.tex.
A: For primitive drawings, I am a big fan of XFig.  The UI is a little clunky, but it can save to dozens of graphics formats and creates figures that are downright trivial to include in a LaTeX document.  The biggest thing for me is that the file format is text-based, so it is completely possible to script more complicated drawings.
A: I too use Mathematica for figures and found it wasn't a great leap from there to using it for drawings. You can draw 2D or 3D primitives pretty easily:
Rectangle[{xmin, ymin}, {xmax, ymax}]

and, like python/matplotlib, being able to parameterise everything allows you to redraw an image for multiple scenarios (or Animate or Manipulate it).
For me the most useful feature is that you can define things in terms of the maths. The MetaPost example mentioned by Marek, in which two curves can be defined and the intersection computed by the drawing package, is handled inherently by Mathematica.
A: I thought a lot about this question since I graduated and began teaching. I think Adobe Illustrator is the best vector image software. It doesn't require any code to draw images; you only have to learn to use some "important" tools. I'm in no way a graphic designer or a professional in Illustrator and I drew this:



Moreover,
*
*you can always find tutorials about drawing anything with Illustrator
*You can export images from Matlab or Autocad to Illustrator (.ai or .eps)
A: I'll interpret your term diagram as "any fancy image that captures some physics".
For this I can hardly recommend anything else then MetaPost. It's on par with TeX in being a little hard to learn but once you do master the basics you won't believe you could have ever used anything else (in particular, GIMP and Inkscape; good analogy here would be to TeX vs. MS Word).
Basic properties

*

*it's a (simple) programming language

*it's vectorial (this should probably go without saying but still)

*it's primitives are things like points, lines, paths, splines

*it contains excellent image manipulation facilities; you can say things like "take this image, scale it up by two and rotate it by 60 degrees"

*you can insert TeX labels

*it can solve equations; This is a real killer that no one else offers. You can draw two curves $X(t)$ and $Y(t)$ (defined most comfortably as splines) and tell MP to compute their intersection, draw a point there and label it with some text

Success story
I used MP to create some polygons on a hexagonal lattice in the context of cluster expansions. There was a huge number of those polygons to draw, so I quickly abandoned all hope of trying to draw them by hand in Inkscape or something similar. True, it would probably be quicker in the end, but I hate manual work; I rather spend much longer learning some programming language and then just code all the work in few minutes. So I put together simple MP program that has converted my input data (vertices and edges of the polygons as just numbers) into beautiful images. For a one night's work and my first time with MP I was more than satisfied.
Goodies

Credit for this amazing picture goes to Johan Kåhrström (go also see more stuff under illustrations there).

*

*http://www.cs.toronto.edu/~mackay/metapost/

*http://www.ursoswald.ch/metapost/tutorial.html

*http://commons.wikimedia.org/wiki/File:Contravariant_Coordinates.png
A: *

*Software for drawing geometry diagrams

*Sometimes I use SAGE.

A: To start with, for scientific drawing usually vector graphics is more suitable - scalable, convenient to modify and produce less bulky files.
For simple general-purpose graphics I use OpenOffice.org Draw (I prefer it to Incscape).
For abstract diagrams there is yEd - Graph Editor.
Both are free, for Win/Linux/MacOSX, easy to learn and can export to vector graphics and pdf.
A: I use TKPAINT which still works very well.
http://www.netanya.ac.il/~samy/tkpaint.html
First, one has to download ActiveTcl for Windows or its Tcl counterparts for Linux or whatever you use. It can draw filled or empty disks, ellipses, squares, rectangles, splines, rotate them, quickly copy them, move them, texts with many fonts, colors, grid, and it may be exported as EPS - encapsulated postscript as well - which is a standard way to embed similar diagrams in TeX papers on the arXiv and beyond.
I've used it in many papers when I was writing them.
Cheers
LM
A: For electric circuits, CircuitLab is a nice online editor and simulator. There are some restrictions to what you can do without an account or with a free account - I can't remember the details - but you can use print-screen to get nice pictures out of it. I like it because it is really at the level of simplicity I need: if I'm explaining a basic electric-circuits question, I do not want to spend more than two minutes drawing, say, five resistors in some parallel/series configuration. CircuitLab gets the job done.
For a tour, see their YouTube video Getting Started with CircuitLab.

Edit: If you want a png output to include in a post on this site, you can go over to Electrical Engineering, which has a built-in implementation in the post editor and simply bring back the image link. Thanks to Chris White for the tip!
A: First of all do not use a raster graphics software like Gimp to draw pictures. This has serious disadvantages when you want to make screen readable documents (the picture pixelizes). For this purpose always use vector graphics. Wikipedia has a nice list of vector graphics software. Among them, I'd recommend the following:


*

*Inkscape (Cross-platform): Although the learning curve is a bit steep, its worth it. Note that Inkscape was not meant for making scientific diagram. Still you'll find a LaTeX plugin, export to LaTeX/PSTricks etc.

*Dia (Cross-platform): Very simple and easy, but not very powerful. Can't process LaTeX.

*Ipe (Cross-platform): Ipe is something in between Inkscape and Dia. Also Ipe was designed for scientific drawing. Can process LaTeX source code and import PDF figures.

*WinFIG (Cross-platform): Although commercial, its quite popular in the scientific community.
EDIT: Wikipedia has a nice page which discusses various software that can be used to create figures. See Wikipedia:How to create graphs for Wikipedia articles
A: There is an add-in for Microsoft Word called Science Teacher's Helper.
http://www.helpscience.com
SmartDraw is also an excellent program for creating diagrams.
http://www.smartdraw.com
A: You can also use PLotly, a collaborative, web-based graphing platform with APIs in Python, R, MATLAB, Julia, and Perl. You you can find the code to make these examples in their documentation.
.
A: I would try matplotlib, but first check here and decide if these pictures satisfies your needs. Also click some picture and inspect source code.
A: Look at SCaVis software. It has many examples illustrating how to draw various graphs. Here is the link to the examples
