Upper and lower tangent line to convex hull from a point
Let's assume that the convex polygon $P$ is defined as an ordered list $(p_0,p_1,...,p_{n-1})$ of points, and for each such point $p \in P$ we are able in $O(1)$ time to find a previous point $Prev(p)$ and a next point $Next(p)$ according to this order, taking into account that:
$$Prev(p_0)=p_{n-1}$$
$$Next(p_{n-1})=p_0$$
The binary search over this list is very similar to a binary search over a regular array - on each step you have a $p_{left}$ point, a $p_{right}$ point and a $p_{mid}$ point. You check some condition on the $p_{mid}$ point and then choose a $[p_{left},p_{mid}]$ interval or a $[p_{mid},p_{right}]$ interval for the next step.
The condition you want to check is the following one. In order for the $p_{mid}$ point to be the tangential point for all lines going through the query point $S$, both neighbors of the $p_{mid}$ point must be on the same side of the line, connecting the point $S$ and the $p_{mid}$. You'll have to choose, which side of this line is right and which side is wrong - this will define, which tangent line you'll get (upper or lower). So, if the previous point $Prev(p_{mid})$ is on the wrong side, then you choose the left interval. Similarly, if the next point $Next(p_{mid})$ is on the wrong side of this line, then you choose the right interval for the next step. This algorithm will stop on one of two tangential points if and only if the point $S$ is located outside of the polygon $P$.
The algorithm doesn't need any preprocessing of the convex polygon $P$ and nevertheless finds tangential points for any query point, located outside of the polygon, in $O(\log n)$ time.