Сообщество программистов Autodesk в СНГ

Разное => Разное => Тема начата: Алексей (IdeaSoft) от 29-01-2017, 20:46:57

Название: Графика C#, PtInRect
Отправлено: Алексей (IdeaSoft) от 29-01-2017, 20:46:57
Подскажите, есть ли функция в DotNet
определения точки внутри прямоугольника?
Использую C#
Или мне следует использовать стандартную
Win API функцию: 

Код - C++ [Выбрать]
  1. BOOL PtInRect(
  2.   _In_ const RECT  *lprc,
  3.   _In_       POINT pt
  4. );
Название: Re: Графика C#, PtInRect
Отправлено: Александр Ривилис от 29-01-2017, 21:03:21
Или мне следует использовать стандартную
Win API функцию:


Код - C++ [Выбрать]
  1.     BOOL PtInRect(
  2.       _In_ const RECT  *lprc,
  3.       _In_       POINT pt
  4.     );

Это вряд ли - этот метод работает только с целыми числами. Прямоугольник с параллельными осям 0X и 0Y сторонами? Тогда всё совершенно просто:
1. Получаем min и max для X и Y прямоугольника (minX, minY, maxX, maxY)
2. Если   minX <= pt.x <= maxX и minY <= pt.y <= maxY, то точка внутри прямоугольника.
Название: Re: Графика C#, PtInRect
Отправлено: Алексей (IdeaSoft) от 29-01-2017, 21:32:17
В принципе согласен.
Если работать только с пикселями, то Win API подходит.
А если в плавающей точкой, то да можно самому написать.
Вообщем так я и сделал.
Название: Re: Графика C#, PtInRect
Отправлено: Дима_ от 30-01-2017, 04:00:25
Или мне следует использовать стандартную
Win API функцию:
Даже с точки зрения производительности - работа обертки вызова данной функции будет дольше аналогичной написанной на .Net.
Название: Re: Графика C#, PtInRect
Отправлено: Алексей (IdeaSoft) от 30-01-2017, 07:45:27
данной функции будет дольше
Т.е. ты хочешь сказать, внутренняя функция Net будет работать быстрее, чем подключаемая из user32.dll.
В учебниках пишут, что если есть возможность делать проект только
из одного dll-модуля или exe, то лучше сделать из одного, т.к. подключение внешний all это накладные расходы.



Название: Re: Графика C#, PtInRect
Отправлено: Дима_ от 30-01-2017, 14:03:42
Т.е. ты хочешь сказать, внутренняя функция Net будет работать быстрее, чем подключаемая из user32.dll.
Смотря какая, такого рода да - т.к. подключение "ест" больше математики чем непосредственно функция, да и вообще .Net использует т.н. Jit компиляцию, так что обогнать его в скорости математических расчетов непросто даже на ассемблере (сам лично с этим сталкивался) - т.к. нативная версия полученная из .Net сборки будет максимально заточена под Ваш компьютер (на котором она выполняется, а не под который компилируется) с учетом всех "фишек" Вашего процессора.