Question: I'm currently writing a divide and conquer version of the Convex Hull algorithm and it's very close to working but am having trouble merging two convex hulls (to form the overall convex hull).

I'm merging by:

* Computing Upper & Lower Hulls for each Input Hull, A and B
* Finding the combined upper hull by ensuring right turns
* Finding the combined lower hull by ensuring left turns
* Computing the union of the 2 combined hulls

I'm not 100% sure if this is the right way to do it - any guidance or pseudocode for finding combined upper/lower hulls?

Answer: 
check this out; it'll give you very clever approaches to convex hull manipulation

<https://web.archive.org/web/20120617005317/http://moais.imag.fr/membres/denis.trystram/SupportsDeCours/convexHull.pdf>
I'm not sure to understand what you mean by lower and upper and it would be good to specify if it is 2D or 3D. 

For a 2D convex hull. I have made an algorithm, which, according to my tests is the fastest (at least twice as fast as Chan) and both are in O(n log h).

But what also differenciate mine, is that is support "online" feeding. I mean that you can add one point at a time dynamically (no remove supported yet). Everything stay in O (log h) per point which is actually the fastest you can get. I think, it is also the only one that is online and being in that performance range.

The article about the convex hull is : [Fast and improved 2D Convex Hull algorithm and its implementation in O(n log h)](https://www.codeproject.com/Articles/1210225/Fast-and-improved-D-Convex-Hull-algorithm-and-its). But the "online" portion is not yet documented. I just finalize it today (2018-01-25). But all the code is accessible at [GitHub](https://github.com/EricOuellet2/ConvexHull). 

For simplicity you can only use the online portion to merge anything dynamically with this code (you can add convex hull point or any point):

```
OuelletConvexHullAvl2Online.ConvexHullOnline convexHullOnline = new OuelletConvexHullAvl2Online.ConvexHullOnline();
                    foreach (Point pt in points)
                    {
                        convexHullOnline.DynamicallyAddAnotherPointToConvexHullIfAppropriate(pt);
                    }

                    return convexHullOnline.GetResultsAsArrayOfPoint();

```