Python, readable, simple and short.
python\nfrom random import randint\n\nclass Solution:\n\n    def __init__(self, rects: List[List[int]]):\n        self.rects = rects\n        self.cellSum = [0]
```python\nfrom random import randint\n\nclass Solution:\n\n    def __init__(self, rects: List[List[int]]):\n        self.rects = rects\n        self.cellSum = [0]\n        \n        # Count the number of cells in each rectangle and add to cellSum as a\n        # cumulative sum.\n        # cellSum is initialized to 0, the reason for this will become evident\n        # later in the code.\n        for rect in self.rects:\n            # The +1 here exists to add one to the width and height.\n            # Because we think of each point as a cell. This allows\n            # us to return a random point in and on the rectange easily.\n            height = abs(abs(rect[3]) - abs(rect[1])) + 1\n            width = abs(abs(rect[0]) - abs(rect[2])) + 1\n            self.cellSum.append(self.cellSum[-1] + (height * width))\n\n    def pick(self) -> List[int]:\n        # Generate a random that falls in the cellSum.\n        # The -1 here makes it so that the following\n        # binary search does not go out of bounds.\n        randomCell = randint(0, self.cellSum[-1] - 1)\n        # Find the cell sum that prior to the random number.\n        idx = self.closestSmaller(self.cellSum, randomCell)\n        # Remove the cell sum so that we can find the point\n        # in the rectangle at idx.\n        randomCell -= self.cellSum[idx]\n        # We are going to return a point in this rectangle.\n        rect = self.rects[idx]\n        # Compute the width of the rectangle so that\n        # we may remove the number of rows that are full.\n        width = abs(abs(rect[0]) - abs(rect[2])) + 1\n        # Remove full rows and returnt the rowId\n        rowId = rect[1] + randomCell // width\n        # Identify the col by wrapping the width around.\n        colId = rect[0] + randomCell % width\n        \n        return [colId, rowId]\n        \n    def closestSmaller(self, nums, target):\n        low = 0\n        high = len(nums) - 1\n        idx = -1\n        while low <= high:\n            mid = low + (high - low) // 2\n            if target >= nums[mid]:\n                idx = mid\n                low = mid + 1\n            else:\n                high = mid - 1\n        return idx\n    \n# Your Solution object will be instantiated and called as such:\n# obj = Solution(rects)\n# param_1 = obj.pick()\n```
[]