How can I optimize my code that uses nested for loops?
It is normally good to break code into several methods.
Everything that is inside your

if(!hit.equals(p) &amp;&amp; !me.equals(p)) 

should be moved to a separate method taking as input those 3 points a,b and c

When coding problems of a mathematical flavor it is often very useful to support your code with some kind of theory.

In this case you might want to look up the mathematical terms "dot product" and "cross product". Once you understand those it becomes easy to implement your function.

And remember to make several functions (dotProduct() and crossProduct()) so you can reuse code later.

When it comes to performance you need to look at your algorithm.
There is no need to test all pairs of points (hit, p).
Maybe you should make a small method that computes the angle of a vector from me to p? If angle is the same they hit, otherwise they miss. 

So the question becomes given a list of angles for points in hits and a list of angles in reachable, do they contain a common angle?