Valentin: Тогда какой смысл говорить о том, что занято больше половины квадратиков? Разделите сразу каждую сторону на N+1 часть, где N - число свечей. Такой торт очень трудно будет перегородить.
Алексей Немиро: По названию buttonDot можно предположить, что на кнопке нарисована именно точка. Тогда она окажется правильным разделителем. Хотя, тогда и в её реализации надо было приписывать к строке саму точку, а не текст...
Valentin: Тоже интересная задача. И ваш ответ неправильный. Скажем, если торт размером 4*4, и 4 свечи стоят в углах, то разрезать его никак не удастся - часть со свечами будет иметь по меньшей мере 10 квадратиков (если обе части должны быть связными).
Николай Павлов: Возьмите ту же "расчёску" - просмотр массива со всё уменьшающимся шагом. Она найдёт непрерывный фрагмент, как только шаг станет меньше либо равен длине этого фрагмента. При правильной организации хватит 2*N/L просмотров (в худшем случае).
Николай Павлов: O(n/2) слишком долго, к тому же, оно равно O(n). Можно найти быстрее :)
А если кусочный - это то же самое, что произвольный. Нужен прямой перебор. Хотя есть ещё ситуации заранее заданного числа кусков, или известного числа ненулевых элементов.
Одномерный морской бой получается :)
Сергей Протько: Интересно, почему вы решили, что мы поворачиваем объект, а не проектор. Оба варианта имеют право на существование и часто встречаются. Впрочем, есть и третий - когда проектор с камерой свободно движутся относительно модели, а их положение получается какими-то дополнительными средствами.
Хотя алгоритм от этого не меняется. Просто в случае объекта на поворотном столике надо ещё применить обратное преобразование поворота, чтобы получить координаты точек в локальной системе координат объекта.
Что значит "расположить кривые как тело вращения" мне понять не удалось.
Nagoran: Подробнее. Пусть m - номер кадра, k - номер строки матрицы, s_mk - x-координата зелёного пикселя на этой строке этого кадра. Вычисляете 3D координаты точки P_mk=(x_mk,y_mk,z_mk), используя направление полосы для m-го кадра, взаимное расположение камеры и проектора, и параметры самой камеры. После этого выдаёте поверхность, состоящую из четырёхугольников (P_mk,P_m,k+1,P_m+1,k+1,P_m+1,k). Возможно, некоторые грани вам не понравятся - они будут слишком вытянутыми. Тогда надо ввести ограничение на длину ребра модели и выбросить грани со слишком длинными рёбрами.
Сергей Протько: Может быть, и не надо. Очень вероятно, что освещённая часть модели на этом кадре не видна с точки расположения камеры - а значит, данных про этот участок просто нет. Заклеивать дырки надо уже на следующих этапах обработки - например, при склейке фрагментов, полученных с разных сторон.
Дмитрий Гавриленко: А вот если в описании GetSet вы оставите
class GetSet { public GetSet2 GS; }
то всё будет нормально работать, даже если GetSet2 будет структурой.