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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > отрезок от точки к линии под углом

отрезок от точки к линии под углом

Ответ
Поиск в этой теме
Непрочитано 12.12.2005, 13:54 #1
отрезок от точки к линии под углом
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,192

Надо программку.
Я не могу придумать алгоритм. Все на плоскости.

есть точка A , есть отрезок BC, есть угол Ъ
Надо построить отрезок первая точка которого нах. в точке А, а вторая на отрезке ВС. При чем отрезки составляют угол Ъ.

У кого какие мысли?
Просмотров: 5794
 
Непрочитано 12.12.2005, 17:10 Re: отрезок от точки к линии под углом
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Apelsinov
Надо программку.
Я не могу придумать алгоритм. Все на плоскости.

есть точка A , есть отрезок BC, есть угол Ъ
Надо построить отрезок первая точка которого нах. в точке А, а вторая на отрезке ВС. При чем отрезки составляют угол Ъ.

У кого какие мысли?
Не тестировал но попробуй:

Код:
[Выделить все]
(defun C:test (/ ang def_ang draw_angle ept
	       line_ang ln pt1 pt2 pt3 spt)
(setvar "osmode" 0)
(setq ln (car (entsel "\nSelect line \n"))
      pt1 (getpoint "\nSpecify point \n")
      def_ang (getorient "\nSpecify included angle in degrees :\n")
      spt (cdr (assoc 10 (entget ln)))
      ept (cdr (assoc 11 (entget ln)))
      line_ang (angle spt ept))

(if (> line_ang pi)
  (setq line_ang (- pi line_ang))
  )

(setq draw_angle (+ pi (+ ang line_ang)))
(setq pt2 (polar pt1 draw_angle 1.)
      pt3 (inters spt ept pt1 pt2 nil))

; TesT :
  
(command "line" pt1 pt3 "")
(princ)
)
Fatty
fixo вне форума  
 
Непрочитано 12.12.2005, 17:15
#3
Vook


 
Регистрация: 18.11.2004
Сообщений: 76


Построить угол на отрезке и провести из А отрезок параллельно стороне угла. Обрезать лишнее
Vook вне форума  
 
Непрочитано 12.12.2005, 17:23
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Тут, по-моему, есть два варианта решения:
[ATTACH]1134397414.jpg[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2005, 17:37
#5
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


Если не програмно то так:
Вызываем команду _xline с опциями угол затем базовый отрезок выбираем в качестве базового отрезка отрезок ВС затем вводим нужный угол и указываем точку А через которую пройдет данный отрезок. Если надо удаляем все лишнее. Нужно только помнить про то как у Вас откладывется угол в Автокаде по часовой или против часовой стрелки!
MIP вне форума  
 
Непрочитано 12.12.2005, 17:58
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Необходимо найти точку Е
1. Из точки А восстановить перпендикуляр на BC (точка Д)
2. Расстояние ДЕ=АД/tan(FI)

(defun FF ( / pt_B pt_A pt_C pt_D pt_E ang_FI L_AD L_DE osm)
(setq pt_B (getpoint "\nУкажите точку В на отрезке: "))
(setq pt_C (getpoint "\nУкажите точку C на отрезке: "))
(setq pt_A (getpoint "\nУкажите точку А: "))
(setq ang_FI (getangle "\nВведите угол фи: "))
(setq pt_D (inters pt_B pt_C pt_A (polar pt_A (+ (angle pt_B pt_C)(* PI 0.5)) 10) nil))
(setq L_AD (distance pt_A pt_D))
(setq L_DE (/ (* L_AD (cos ang_FI))(sin ang_FI)))
(setq pt_E (polar pt_D (angle pt_B pt_C) L_DE))
(command "_COLOR" "_red")
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "_LINE" pt_D pt_A pt_E "")
(setvar "OSMODE" osm)
(command "_COLOR" "_bylayer")
(princ)

[ATTACH]1134399530.dwg[/ATTACH]
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.12.2005, 18:03
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


И в конце еще кавычка
(defun FF ( / pt_B pt_A pt_C pt_D pt_E ang_FI L_AD L_DE osm)
(setq pt_B (getpoint "\nУкажите точку В на отрезке: "))
(setq pt_C (getpoint "\nУкажите точку C на отрезке: "))
(setq pt_A (getpoint "\nУкажите точку А: "))
(setq ang_FI (getangle "\nВведите угол фи: "))
(setq pt_D (inters pt_B pt_C pt_A (polar pt_A (+ (angle pt_B pt_C)(* PI 0.5)) 10) nil))
(setq L_AD (distance pt_A pt_D))
(setq L_DE (/ (* L_AD (cos ang_FI))(sin ang_FI)))
(setq pt_E (polar pt_D (angle pt_B pt_C) L_DE))
(command "_COLOR" "_red")
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "_LINE" pt_D pt_A pt_E "")
(setvar "OSMODE" osm)
(command "_COLOR" "_bylayer")
(princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.12.2005, 12:13
#8
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Fatty , спасибо за идею, Ваше что-то не сработало, где-то помарки, ну да главное я понял, сваял сам.

kpblc Конечно, два варианта, верное замечание. У меня выбирается та точка на линии , кот ближе к точке ее указания.

MIP Без программы по-любому не удобно. но за науку спасибо, не знал про опции xline.

VVA Мало что понял. Если это работает - то это просто замечательно. Но в плане лиспа, видимо, у вас впереди больше чем позади без обид. Спасибо за участие.

Такое получилось. Куча библиотечных функций, их все прикладывать просто в лом, если кто нибудь ну ООООчень попросит, я это сделаю. А если кто нибудь решит как это автоматизировать то сделаю с удовольствием и многие скажут спасибо....

Код:
[Выделить все]
(defun apel-draw-line-point_ang_line (/ point1	     obj_line1
				      angle_user     user_point_line
				      obj_line1	     SEpoint
				      angle_line1    angle_user
				     )
  (if (and (setq point1 (GETPOINT "\n Specify point:"))
	   (setq point1 (TRANS point1 1 0))
	   (setq obj_line1 (APEL-ENTSEL_POINT "\nSelect line:"))
	   (setq angle_user (getint "\nSpecify angle:"))
	   (setq user_point_line (cadr obj_line1))
	   (setq obj_line1 (car obj_line1))
	   (setq SEpoint (APEL-LINE-2COORD obj_line1))
	   (setq angle_line1
		  (APEL-MOD-GET_PROPERTY obj_line1 "angle")
	   )
	   (setq angle_user
		  (* angle_user (/ pi 180))
	   )
      )
    (APEL-DRAW-LINE
      (list
	point1
	(APEL-POINT-MINDIST_POINT
	  user_point_line
	  (list	(inters
		  point1
		  (polar point1 (+ angle_line1 angle_user) 1.0)
		  (car SEpoint)
		  (cadr SEpoint)
		  nil
		)
		(inters
		  point1
		  (polar point1 (- angle_line1 angle_user) 1.0)
		  (car SEpoint)
		  (cadr SEpoint)
		  nil
		)
	  )
	)
      )
    )
  )
)
Apelsinov вне форума  
 
Непрочитано 13.12.2005, 13:59
#9
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


У Fatty попросту небольшая опечатка:
вместо: (setq draw_angle (+ pi (+ ang line_ang)))
надо: (setq draw_angle (+ pi (+ def_ang line_ang)))
AY вне форума  
 
Непрочитано 13.12.2005, 15:14
#10
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от AY
У Fatty попросту небольшая опечатка:
вместо: (setq draw_angle (+ pi (+ ang line_ang)))
надо: (setq draw_angle (+ pi (+ def_ang line_ang)))
Спасибо
Видимо поменял пока накладывал лоск, а в черновике точно
так

~'J'~
fixo вне форума  
 
Непрочитано 13.12.2005, 15:18
#11
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Apelsinov
Fatty , спасибо за идею, Ваше что-то не сработало, где-то помарки, ну да главное я понял, сваял сам.
Интересно а куда делся ваш сайт? Если жив еще, нельзя ли адрес?

Regards,

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 13.12.2005, 17:13
#12
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,192
<phrase 1=


Цитата:
Сообщение от Fatty
Интересно а куда делся ваш сайт? Если жив еще, нельзя ли адрес?
Мертв. За ненадобностью.
Обновлять его мне наскучивает очень быстро, вот еслиб как-то автоматически.....шоб все само-собой на сайт закачивалось...
Apelsinov вне форума  
 
Непрочитано 13.12.2005, 17:37
#13
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Apelsinov
Цитата:
Сообщение от Fatty
Интересно а куда делся ваш сайт? Если жив еще, нельзя ли адрес?
Мертв. За ненадобностью.
Обновлять его мне наскучивает очень быстро, вот еслиб как-то автоматически.....шоб все само-собой на сайт закачивалось...
А и правильно, чего насиловать свою природу?
Уважаю любой выбор

~'J'~
fixo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > отрезок от точки к линии под углом

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