Как часто бывает, я ответил на свой вопрос только через несколько минут после его публикации!
Мой код для определения того, между какими точками B должно идти, выглядит примерно так:
while areaSoFar + areas[i] < targetArea:
i++
areaSoFar += areas[i]
Получается, что мне просто нужно было вставить последний элемент формулы суммирования площади в ту же проверку:
while areaSoFar + areas[i] + points[i].x * start.y - points[i].y * start.x < targetArea:
i++
areaSoFar += areas[i]
Обратите внимание, что приведенный выше массив областей [] содержит каждый элемент суммирования областейформула .
По духу это похоже на ответ Гуффы, но несколько эффективнее.