Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как найти экстремумы всех графических объектов?

Как найти экстремумы всех графических объектов?

Ответ
Поиск в этой теме
Непрочитано 16.09.2008, 12:35 #1
Как найти экстремумы всех графических объектов?
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Доброго времени суток.

Нужно найти точку на любом объекте, которая наиболее приближена к оси координат.
Прямолинейные особых вопросов не вызывают там можно просто проверить какя из крайних точек имеет наименьшую координату, но как быть с криволинейными.

Поэкспериментировал с функцией
(vlax-curve-getClosestPointToProjection <кривая><точка><нормаль>)
Чуйствую, что именно эта функция мне нужна. Но никак не могу понять назначение нормали.
Я так понимаю что аргумент-нормаль это точка из которой опускается нормальная нормаль к аргументу-точка, прощще гворя характеризует направление нормали от точки.
Но результаты эксперимента показывают, что результат зависит не только от направления нормали но и от ее длины.
Для примера была выбрана окружность и было определено, что если длина нормали больше диаметра окружности а направление из начала координат по оси х, то только тогда будет найдена крайняя точка к оси х.
К оси Y крайняя точка вообще никак не находится, перепробованы все направления нормали даже в направлении оси Z.
PS аргумент точка всегда был 0,0,0
Просмотров: 3347
 
Автор темы   Непрочитано 16.09.2008, 13:01
#2
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Вот я дурак!!!!!!
Пол ночи экспериментировал в ПСК.
А в полученной точке отрисорывал кружочки функцией command

А эти функции работают в мировой.

Последний раз редактировалось mmax, 18.09.2008 в 18:36.
mmax вне форума  
 
Автор темы   Непрочитано 19.09.2008, 01:17
#3
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


В итоге вродебы все правильно выходит, но почемуто только если аргумент-точка лежит в точке 0,0 МСК, ну а аргумент-нормаль соответственно на осях МСК, а объект кривая не пересекает оси МСК.
Если такие жесткие условия не выполняются, то ничего не выходит.
А я уже людям пообещал.

Мне нужно чтобы можно было находить минимумы не только к автокадовским осям, также нужно находить их и к произвольным осям, начало которых не совпадает с началом МСК.
Да и в ПСК тоже ничего не получается.

Вот код
Код:
[Выделить все]
(defun c:test ()

  (setq curva (vlax-ename->vla-object (car (entsel "\nВыберите кривую : "))))

  (setq point (trans (getpoint "\nАргумент точка : ") 1 0))

  (setq normal1 (list (1+ (nth 0 point)) (nth 1 point) (nth 2 point)))

  (setq normal2 (list (nth 0 point) (1+ (nth 1 point)) (nth 2 point)))
  
(setq extr1 
  (vlax-curve-getClosestPointToProjection
    curva
    point
    normal1))
(setq extr2 
  (vlax-curve-getClosestPointToProjection
    curva
    point
    normal2))
  

(vla-addcircle
  (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))
  (vlax-3d-point extr1)
  100)

(vla-addcircle
  (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))
  (vlax-3d-point extr2)
  100)
  
  (princ)
)
Еще прилагаю рисунок где наглядно показано чего я хочу. Там справа как раз сплайн лежит так, что ниодин экстремум не найти, а слева сплайн который лежит там, где экстремумы спокойно находятся.

Спасайте, товарищи!!!
Вложения
Тип файла: dwg
DWG 2007
aaaaa.dwg (61.9 Кб, 377 просмотров)
mmax вне форума  
 
Непрочитано 19.09.2008, 16:54
#4
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от mmax Посмотреть сообщение
Спасайте, товарищи!!!

если без проверок и только для мировой системы координат:
Код:
[Выделить все]
(defun c:test (/ e p)
 (setq e (car (entsel "\n Укажите контур"))
       p (getpoint "\n Укажите точку")
 ) ;_  setq
 (foreach a
          (mapcar
           (function
            (lambda (a)
             (vlax-curve-getClosestPointToProjection e p a)
            ) ;_  lambda
           ) ;_  function
           '((1 0 0) (0 1 0))
          ) ;_  mapcar
  (entmakex (list '(0 . "CIRCLE")
                  (cons 10 a)
                  '(40 . 100)
            ) ;_  list
  ) ;_  entmakex
 ) ;_  foreach
)
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 19.09.2008, 17:40
#5
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Спасибо, Евгений.
Будет еще маленький вопросик.
Ваш и мой вариант впинципе одинаковые, мой без цикла а ваш с циклом но вычисляются одинаково.
У вас нормаль задается (1 0 0) (0 1 0) относительно начала МСК у меня также только относительно аргумента-точки.
Тоесть получается что направление нормали характеризуется не напарвлением от аргумента-точки к аргументу-нормали, а от начала МСК к аргументу-нормали. Я правильно понял?
mmax вне форума  
 
Непрочитано 19.09.2008, 17:45
#6
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


конечно, это же вектор... Он просто задает направление, как компас, т.е. не зависит, где именно вы смотрите направление по компасу - оно просто на север.
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 19.09.2008, 19:39
#7
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от Н.Н. Полещук
<точка> -- список из трех вещественных чисел с координатами точки в МСК (через эту точку строится плоскость, на которую будет выполняться проектирование); <нормаль> -- список из трех вещественных чисел с координатами точки в МСК, определяющими положение нормали к плоскости проекции
Я вижу что здесь четко сказано, что направление вектора задается от <точка> к <нормаль>.

Вот.

Чтож. Так еще лучше.
Спасибо, Евгений, что просетили.
mmax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как найти экстремумы всех графических объектов?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продавливание. Как найти момент сопротиления контура бетона расчетного сечения плиты ? Olga12 Железобетонные конструкции 35 03.08.2021 08:34
Как найти момент инерции KonGo AutoCAD 5 27.10.2007 22:23
Как найти текст без содержания и еще вопросы Елена AutoCAD 5 29.06.2004 14:16
Как слой включить сразу во всех видовых экранах ilka_t AutoCAD 4 26.04.2004 11:20
Как найти файл по содержащемуся в нем тексту? Visla AutoCAD 7 09.04.2004 12:16