[CDR X5-X8] как узнать лежит ли точка с координатами в шейпе?

Статус
Закрыто для дальнейших ответов.

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
есть некая точка с координатами x y
есть некая замкнутая кривая. причем в ней могут быть "дырки"
задача - узнать лежит ли точка в этой кривой ( не в "дырках") или нет.

пробовал через Set s = ActivePage.SelectShapesAtPoint(x, Y, True)
но 1 раз из 500 выделял шейп, хотя исходя из координат не должен бы.
причем ошибка плавающая, каждый раз такое случалось на уже другом шейпе. поэтому думаю что это просто баг.

сейчас отлавливаю расположение точки методом перебора всех точек кривой и путем всем известного арифметического действия узнаю лежит ли точка в ней или нет.

этот способ рабочий, но уж очень громоздкий
поэтому вопрос - есть ли еще какойто способ?
Спасибо!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Ну классический метод в этом случае IsOnCurve
Но, насколько я понимаю, алгоритм там аналогичный, соответственно работает не всегда корректно :(
 
  • Спасибо
Реакции: Nezar

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213

Не по теме:

Однажды мне пришлось решать задачу, в которой требовалось определять точку пересечения произвольной замкнутой кривой Безье и отрезка в InDesign. После недели мучений с формулами и тестами я тупо стал использовать скриптовый аналог утилиты Pathfinder для получения куска отрезка после вычитания из него кривой.

 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844

Не по теме:
Ну так это не утилита, а встроенная функция. Разумеется, самый прямой путь через нее, тем более, если к ней, внезапно, доступ из скриптинга есть.
Ибо любое, самое корректное матмоделирование не будет один к одному повторять то, что уже реализовано в индизайн индусским гением программирования.
А сам бы я, будь поставлена мне подобная задача, подсмотрел, как тут умные люди подобное реализуют 'hmmm'

 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Ну классический метод в этом случае IsOnCurve
поигрался я с ним.
есть глюк, а может так и должно быть.
он возвращает одно из трех значений - за шейпом, на шейпе и на линии.
так вот если линия равна нулю или 0.00001 или удалена, то функция все равно говорит что точка находится на линии даже если она за пределами шейпа или внутри возле границы. такой результат в сего в паре сотых миллиметра от границы, но к сожалению этого достаточно чтобы дальше вычисления были не верны.
в итоге исключил линию из определения вхождения, пожертвовав этим расстоянием внутри шейпа.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Ну там вроде допуск параметром задавать можно. А вообще говоря, у корела точность вычислений имеет вполне реальное ограничение снизу и сверху. Т.е. у себя внутри он оперирует не числами с плавающей запятой, а целыми значениями долей миллиметра.
 
Статус
Закрыто для дальнейших ответов.