Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.05.2017, 12:37
Интересующийся
Отправить личное сообщение для piton369 Посмотреть профиль Найти все сообщения от piton369
 
Регистрация: 26.01.2017
Сообщений: 16

Геометрия в скрипте для Altium Designer
Добрый день. Пишу скрипт для Altium Designer. Его смысл заключается в том, что он простыми линиями (Track) и/или дугами (Arc) обрисовывает отверстие (Pad).
Застрял на геометрии. У объекта отверстие есть следующие переменные:
Pad.x - координата центра отверстия по оси х.
Pad.y - координата центра отверстия по оси y.
Pad.Rotate - угол поворота отверстия.
Pad.HoleSize - диаметр отверстия.
Pad.Length - длина отверстия (появляется только у отверстия эллипсоидной формы).
И вот с эллипсоидным отверстием начинается проблема. Оно состоит из двух линий и двух дуг. Каждое отверстие соединяется с двумя дугами. Мне нужно посчитать точки где они это делать, чтобы построить их, потому что у линий есть переменные Track.x1, Track.x2, Track.y1 и Track.y2. У дуг есть Arc.x, Arc.y, Arc.StartAngle, Arc.EndEngle - координаты центра и начальный и конечный угол дуги.
Я пытался рассчитать с помощью формул типа x*cos(Pad.Rotate)-y*sin(Pad.Rotate), но кажется, что они должны быть разными для разных углов поворота, потому что нормально получается построить только для одной линии и только при начальном угле поворота.
Я или путаю знаки или использую не те формулы. Подскажите, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2017, 19:16
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

piton369, нарисуй.
Ответить с цитированием
  #3 (permalink)  
Старый 05.05.2017, 09:43
Интересующийся
Отправить личное сообщение для piton369 Посмотреть профиль Найти все сообщения от piton369
 
Регистрация: 26.01.2017
Сообщений: 16

Сначала скриншоты.
Вот это 3D вид двух типов отверстий. С круглым и квадратным отверстиями.

А вот так овальное выглядит в рабочем окне программы, линия, которая нарисована синим это Track:

Вот все возможные типы отверстий, все они могут быть повернуты на произвольный угол:

Так выглядит Arc с параметрами Arc.StartAngle - 90, Arc.EndAngle - 270 и Arc.StartAngle - 0, Arc.EndAngle - 360:

Идем дальше.
Я хочу получить такую фигуру из 2 штук Track и 2 штук Arc:

Координаты вот этих точек я не могу рассчитать:

Последний раз редактировалось piton369, 05.05.2017 в 09:54.
Ответить с цитированием
  #4 (permalink)  
Старый 05.05.2017, 11:56
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

piton369, какие-то противоречивые соответствия Symbol и Hole Type на третьей картинке:

Треугольник - Rectangle (Прямоугольник)
Круг - Slot (Овал, судя по всему)
Квадрат - Round (Круг)
Звезда - Square (Квадрат)

Собственно, чем Slot не подходит он же Овал, судя по картинке?

Сообщение от piton369 Посмотреть сообщение
У дуг есть Arc.x, Arc.y, Arc.StartAngle, Arc.EndEngle - координаты центра и начальный и конечный угол дуги.
А радиус окружности где, а направление дуги (по/против часовой стрелки) где?

Последний раз редактировалось Rise, 05.05.2017 в 12:11.
Ответить с цитированием
  #5 (permalink)  
Старый 05.05.2017, 15:41
Интересующийся
Отправить личное сообщение для piton369 Посмотреть профиль Найти все сообщения от piton369
 
Регистрация: 26.01.2017
Сообщений: 16

Я не могу скинуть скриншоты со своей версии программы, поэтому нагуглил. Symbol просто условное обозначение, на него можно не смотреть. Эта картинка из следующей версии и там добавлен ещё один тип отверстий(Rectangle). В моей есть только Slot, Round и Square.

Да, вот мне надо взять данные из отверстия типа Slot и нарисовать линиями и дугами как на последних картинках. Это мне надо для ускорения процесса рисования конструкторской документации.

В конечном итоге я хочу получить из такого варианта:


Такой:


Касательно Arc. Направление дуги отсутствует. Оно указывается по сути стартовым углом и конечным. Т.е. чтобы нарисовать дугу, загнутую влево берем углы начальный - 90 и конечный - 270, а если хотим загнуть вправо, то начальный берем - 270, а конечный - 90. А радиус окружности есть, я его не написал Arc.Radius. Занятно, что у дуги радиус, а у отверстия диаметр.

Последний раз редактировалось piton369, 05.05.2017 в 16:07.
Ответить с цитированием
  #6 (permalink)  
Старый 05.05.2017, 17:07
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

piton369, похоже на Округленный Прямоугольник (Rounded Rectangle) с радиусом углов 50% ширины.
Сообщение от piton369 Посмотреть сообщение
Занятно, что у дуги радиус, а у отверстия диаметр.
Это не одно и тоже, радиус это половина диаметра.
Сообщение от piton369 Посмотреть сообщение
Координаты вот этих точек я не могу рассчитать:
Изображения:
Тип файла: png rect.png (2.3 Кб, 21 просмотров)
Ответить с цитированием
  #7 (permalink)  
Старый 10.05.2017, 10:59
Интересующийся
Отправить личное сообщение для piton369 Посмотреть профиль Найти все сообщения от piton369
 
Регистрация: 26.01.2017
Сообщений: 16

Да, на миниатюре всё верно. Именно эти точки я не могу рассчитать. Нужна общая формула, которая будет работать при любом повороте отверстия. Отверстие может поворачиваться на любое целое значение угла от 0 до 360 градусов.
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2017, 14:58
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

получить координаты чего угодно после поворота = тригонометрия
Если нужно повернуть объект т.е. сразу кучу точек вокруг заданой оси тогда матрица трансформации
ну или как частный случай только поворота на двухмерной плоскости вокруг заданной точки матрица поворота
Если читать и понимать для тебя пока сложно то нужно обращаться в раздел работа.
Ответить с цитированием
  #9 (permalink)  
Старый 10.05.2017, 15:32
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

piton369, а что известно, радиус дуг, центры дуг, расстояние между центрами, центр поворота, угол поворота?
Ответить с цитированием
  #10 (permalink)  
Старый 10.05.2017, 15:40
Интересующийся
Отправить личное сообщение для piton369 Посмотреть профиль Найти все сообщения от piton369
 
Регистрация: 26.01.2017
Сообщений: 16

Не совсем правильно выразился про поворот. Спрошу по-другому. Как рассчитать то же самое, что тут:

Для такого случая, где есть координаты центра x1, y1:

Последний раз редактировалось piton369, 10.05.2017 в 15:59.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
HTA-приложение для радио Pianorama Magneto Ваши сайты и скрипты 42 22.01.2012 08:34
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31