Подогнать фигуру к точкам

Ваши два примера кода гарантируют, что они будут иметь одинаковый результат в однопоточных средах, которые .Net не являются, и если MaxResults является полем (а не свойством). Компилятор не может предположить, если вы не используете функции синхронизации, что criteria.MaxResults не изменится в течение вашего цикла. Если это свойство, он не может предположить, что использование свойства не имеет побочных эффектов.

Эрик Липперт совершенно правильно указывает, что он сильно зависит от того, что вы подразумеваете под «компилятором». Компилятор C # -> IL? Или компилятор IL -> машинного кода (JIT)? И он прав, чтобы указать, что JIT вполне может оптимизировать свойство getter, так как он имеет всю информацию (тогда как компилятор C # -> IL не обязательно). Это не изменит ситуацию с несколькими потоками, но, тем не менее, это хорошая точка.

5
задан Epic Wink 22 March 2019 в 06:26
поделиться

1 ответ

Хорошо, тогда вам придется обрабатывать сетки с объемом. Это многое меняет ...

  1. сегментированные объекты

    выбирают все грани, заключающие его внутрь ... Так что это похоже на:

    • [111 ] Найти дыры в наборах 2d точек?

    , так что просто найдите точку внутри еще неиспользованной сетки ... и "заполняйте" объем, пока не достигнете всех граней, из которых он состоит. Выберите эти лица как принадлежащие новому объекту. и установите их как использованные ... остерегайтесь касания объектов, которые могут привести к использованию лиц дважды или более ...

    Вы можете сделать это также с векторной математикой / пробелом, так что просто проверьте, если линия от какой-то внутренней точки к грани ударяет по любому другому лицу ... если нет, вы нашли свое поверхностное лицо ... похоже на Тест удара

  2. объект процесса (необязательно)

    вы можете дополнительно сегментировать объектную сетку на «плоские» объекты, из которых он состоит группируя грани, принадлежащие к одной плоскости ... или внутри охватывающего ребра / контура ..., затем определите, что они

    • треугольник
    • прямоугольник
    • многоугольник [1145 ]
    • диск

    по количеству и типу лиц вы можете обнаружить основные объекты, такие как:

    cone = 1 disc + 1 curved surface with singular edge point parallel to disc center
    box/cube = 6 rectangles/squares
    cylinder = 2 discs + 1 curved surface with center axis going through discs centers
    
  3. вычислить основные геометрические свойства отдельные объекты (необязательно)

    , такие как BBOX или OBB , поверхность, объем, геом. центр, центр масс, ...

    1126] Теперь просто решите, какой это тип объекта. Например, соотношение между площадью поверхности и объемом может указывать на сферу или эллипсоид, если OBB совпадает со сторонами, оно намекает на поле, если геом и центры масс совпадают, это указывает на симметричный объект ...

  4. передать сетку в функцию подбора возможного типа объекта

    , поэтому на основе маркеров # 2, # 3 у вас есть представление о том, какой объект может быть какие формы, так что просто подтвердите это с вашей функцией подгонки ...

    Чтобы упростить этот процесс, вы можете использовать свойства из # 3 , например, см. Аналогичные:

0
ответ дан Spektre 22 March 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: