I would argue that your code suffers from excessive commenting, which is as bad as under-commenting. I also have a personal preference for avoiding end-of-line comments in all but the simplest of cases, but that's personal preference.
Let's look at some examples:
> int n; // number of points in the array
OK, so here you've declared an integer variable and given it the identifier 'n'. Because 'n' is devoid of meaning you have a comment alongside the declaration so that the reader knows what 'n' is for. So now what do you do? Do you comment the use of 'n' every time it's used in your program? Or do you expect the reader to remember, or to search the code for the declaration and comment? ...
> ...
> cin >> n;
> ...
> Q = new Point[n]; // allocate space for Q of n Points
Hmmm, how about calling it something other than 'n', for instance, let's call it 'numberOfPoints'. Now lets' look at the resulting changes to the code:
int numberOfPoints;
...
cin >> numberOfPoints;
...
Q = new Point[numberOfPoints];
Notice how the identifier conveys meaning, and you no longer need to comment the declaration or use of the variable.
Single character identifiers should generally be reduced to use only for loop indexes and the like, and even then there is often value in using a meaningful name.
There are various other examples where you need to let the code do the talking, and cases where the code already does but you use a comment in addition to the code, which is quite unecessary.
Another point, there are several ways to handle accessors (getters and setters) and this is one:
> int x(); // returns the x-coordinate
> void x(int); // sets the x-coordinate to the input value
but using the same overloaded function name for getting and setting can lead to confusion. Probably simpler and clearer is:
int getx();
void setx(int);
The comments are no longer necessary, and reading the code where the functions are called is easier on the reader.
>return 0; // successful completion
Why comment it? Returning zero means successful termination. If you really want to be clear you can always return EXIT_SUCCESS from <cstdlib> instead but return 0 should be enough.
You're still using the outdated C++ headers, which is a shame.
Also, C++ comes with a swap function so you don't need to roll your own.
> if (again == 'Y') main();
This is a real no-no. In C++ it's illegal to call main(). Don't do it. There are other ways to re-run the code inside main.
> int n;
> cin >> n;
> P = new Point[n];
Sooner or later someone using your program will enter a letter or something else other than a number, and then it will probably crash the program, because cin goes into a failed state. You should code against this.
There are other issues, but that's probably enough

HTH