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

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

Квадрантное представление окружности на AutoLISP

Ответ
Поиск в этой теме
Непрочитано 30.11.2011, 21:48 #1
Квадрантное представление окружности на AutoLISP
v1talka
 
Регистрация: 30.11.2011
Сообщений: 17

Здравствуйте! Очень нужна помощь с написанием программы на AutoLISP. Условие: квадрантное представление окружности. То есть, пользователь должен выбрать окружность, которая будет представлена в виде квадратиков с точностью (количеством квадратиков), которую введет пользователь. Алгоритм выполнения представляю почти досконально, проблема только с реализацией этого на AutoLISP, который до этого не использовал. Буду очень благодарен, если кто согласится помочь.
Просмотров: 8539
 
Непрочитано 30.11.2011, 22:08
#2
Кулик Алексей aka kpblc
Moderator

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


А можно рисунок глянуть? Чего-то я ничего не понял...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.12.2011, 00:05
#3
v1talka


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


если кто-то возьмется, могу подробнее всё объяснить. заранее спасибо.

- нужно что-то типа этого, только в 2d

Последний раз редактировалось v1talka, 01.12.2011 в 00:32.
v1talka вне форума  
 
Непрочитано 01.12.2011, 00:31
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну скажем так если не объяснишь - то точно никто не возьмется.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.12.2011, 00:38
#5
v1talka


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Ну скажем так если не объяснишь - то точно никто не возьмется.
я понимаю. пытаюсь объяснить. Октантное или воксельное представление есть, оно используется для 3d моделей, а мне нужно квадрантное, т.е. то же самое, но для 2d окружности.
v1talka вне форума  
 
Непрочитано 01.12.2011, 00:44
#6
Кулик Алексей aka kpblc
Moderator

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


Картинку приложи к посту. Подробности - в справке по форуму.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.12.2011, 00:49
#7
v1talka


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Картинку приложи к посту. Подробности - в справке по форуму.
приложил ко второму посту, спасибо
v1talka вне форума  
 
Непрочитано 01.12.2011, 01:30
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Если не размер, а именно количество квадратиков - то выкладывай свой "доскональный" алгоритм (описание алгоритма) - т.к. простой мне в голову не приходит (вижу вариант только примерно "прикидывать" размер и методом льва в африке проврять подошел или нет) хотя сегодня я уже конечно никакой писать не буду, если там только нет какой-нибудь хитрости с учетом что это именно круг - типа распределить вначеле центры - а размер сам понятен станет, вобщем завтра посмотрю (а может и напишу).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.12.2011, 22:28
#9
v1talka


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


в ЛС скинул Вам про октантное дерево информацию, она аналогична тому, что нужно мне.
В общем, есть чертеж, в котором есть окружность. Пользователь должен выбрать любую окружность, для неё я нахожу координаты центра (x,y) и радиус. это потребуется для построения первого описанного вокруг окружности квадрата. затем нужно, чтобы пользователь ввел число квадратов, на которые ему нужно будет еще разделить этот квадрат (точность). т.е. это будет число 1, 4, 9, 16, 25 и т.д. вот до этого момента код я написал. дальше сложнее. я бы делал так: цикл, в котором каждый раз проверяется пересекается ли квадрат окружностью. для первого прохода цикла это не так сложно - проверить всего пересекается ли описанный вокруг окружности квадрат с окружностью. если да, то разделить его на n частей. n будет зависеть от требуемой точности. дальше этот цикл будет проходить до тех пор, пока квадратов не станет n. т.е. делиться на части будут только те квадраты, которые пересекаются с окружностью.
Пример: пользователь ввел число 256. сначала описывается квадрат вокруг окружности, потом он проверяется пересекается ли он с окружностью. ответ - да - делим на 4 части, затем проверка пересекаются ли эти 4 квадрата с окружностью, ответ - да - делим каждый из них еще на 4 и т.д. Когда количество квадратов = n - удаляем квадраты, которые находятся за пределами круга. Приложил картинки для наглядности:
[IMG]http://s002.***********/i199/1112/8f/ae2011d5a76a.png[/IMG][IMG]http://s43.***********/i101/1112/12/974962eb20b3.png[/IMG][IMG]http://i014.***********/1112/ad/d1b8a97032a2.png[/IMG][IMG]http://s017.***********/i424/1112/eb/ee45fb3cc589.png[/IMG][IMG]http://s16.***********/i191/1112/bd/f218cf54f654.png[/IMG][IMG]http://s44.***********/i105/1112/70/4ceb13ef04ae.png[/IMG][IMG]http://s017.***********/i432/1112/26/db40b309d9dd.png[/IMG][IMG]http://s017.***********/i431/1112/d6/ebf38384ffd2.png[/IMG][IMG]http://s017.***********/i418/1112/85/d24fa68086cf.png[/IMG]

Последний раз редактировалось v1talka, 01.12.2011 в 22:39.
v1talka вне форума  
 
Непрочитано 01.12.2011, 22:49
#10
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Описаный выше алгоритм - это модификация алгоритма разбиения пространства, им не достичь ограничения на N квадратов в разбиении
Цитата:
дальше этот цикл будет проходить до тех пор, пока квадратов не станет n
Это будет не цикл, а рекурсия. Каждая итерация может добавлять больше одного квадрата, когда вы достигните ограничения N, у вас в стеке рекурсии останутся вообще не разбитые и "недобитые" квадраты. Такчто ограничение N - не верное. нужно ограничивать размер квадрата и глубину рекурсии.
Цитата:
т.е. это будет число 1, 4, 9, 16, 25
Зачем? разбивать всегда на 4 (или на 2, но тогда нужно смотреть по горизонтали или вертикали буть текущий квадрат\прямоугольник) результат всеравно будет аналогичный.

Ну а так как ровно N квадратов таким алгоритмом всеравно не получить, лучше воспользоваться алгоритмом растеризации окружности Брезенхема, пощитав размер квадрата для примерного получения N, либо запросив от пользователя этот размер.
zamtmn вне форума  
 
Автор темы   Непрочитано 01.12.2011, 23:01
#11
v1talka


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Ну а так как ровно N квадратов таким алгоритмом всеравно не получить, лучше воспользоваться алгоритмом растеризации окружности Брезенхема, пощитав размер квадрата для примерного получения N, либо запросив от пользователя этот размер.
не обязательно N, нужно просто как-то дать возможность пользователю ввести требуемую точность.
v1talka вне форума  
 
Непрочитано 01.12.2011, 23:46
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


То что ты описываешь расходиться само с собой - тебе нужно задать из скольки квадратов сделать приближение к окружности - описанный алгоритм этого не делает, если количество не так важно - его можно в пять раз короче написать - определись уж что нужно чтобы "абы как лишь бы быстро" или "в соответствии с требованиями" (а еще лучше напиши для чего оно тебе - быть может "тут вобще все по другому" ).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.12.2011, 00:26
#13
v1talka


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
То что ты описываешь расходиться само с собой - тебе нужно задать из скольки квадратов сделать приближение к окружности - описанный алгоритм этого не делает, если количество не так важно - его можно в пять раз короче написать - определись уж что нужно чтобы "абы как лишь бы быстро" или "в соответствии с требованиями" (а еще лучше напиши для чего оно тебе - быть может "тут вобще все по другому" ).
оно мне для сдачи лабораторной в универе. требование было - квадрантное представление круга. как пример дали посмотреть октантное представление 3d моделей. всё, кроме этого, мои мысли по этой задаче
v1talka вне форума  
 
Непрочитано 02.12.2011, 00:37
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Так с какого Вы решили что задавать надо именно количеством квадратов??
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 02.12.2011, 01:45
#15
v1talka


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Так с какого Вы решили что задавать надо именно количеством квадратов??
просто предположил, что так будет проще. возможно, это не лучший вариант, не спорю
v1talka вне форума  
 
Непрочитано 02.12.2011, 01:46
#16
_REGEN


 
Регистрация: 14.12.2010
Там, где мамонты жили ...
Сообщений: 224


Цитата:
Сообщение от v1talka Посмотреть сообщение
пользователь должен выбрать окружность, которая будет представлена в виде квадратиков с точностью (количеством квадратиков)
Цитата:
Сообщение от v1talka Посмотреть сообщение
требование было - квадрантное представление круга
Так в виде квадратов или квадраНтов?
__________________
Время – лучшее лекарство, лечит даже от жизни.
_REGEN вне форума  
 
Автор темы   Непрочитано 02.12.2011, 01:52
#17
v1talka


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


Цитата:
Сообщение от _REGEN Посмотреть сообщение
Так в виде квадратов или квадраНтов?
видимо, квадрантов...
v1talka вне форума  
 
Непрочитано 02.12.2011, 03:42
#18
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Толковый словарь русского языка под редакцией Т. Ф. Ефремовой

КВАДРАНТ
квадрант [квадрант] м. 1) Сектор с центральным углом в 90 градусов; четвертая часть круга. 2) Старинный угломерный астрономический инструмент для измерения высоты небесных светил над горизонтом и угловых расстояний между светилами. 3) Прибор для измерения углов при вертикальной наводке артиллерийских орудий.
Profan вне форума  
 
Непрочитано 02.12.2011, 09:59
#19
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от v1talka Посмотреть сообщение
видимо, квадрантов...
Я плачу - ты сходи в универ что-ли узнай чего нужно-то.
Offtop: А вобще по таким студентам "сапоги" плачут.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 02.12.2011, 22:00
#20
Li6-D


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


Формализую задачу насколько понял.
Пользователь указывает на чертеже круг и задает натуральное число, которое определяет сетку
(т.е. на сколько частей ею делится вертикальный и горизонтальный радиусы круга).
Алгоритм должен найти координаты покрывающих окружность (не круг) элементарных квадратов сетки,
например, координаты их правого нижнего угла.

Теперь направляющие косинусы решения:
1) Пусть один такой квадрат найден (в качестве первого квадрата можно принять правую квадрантную точку окружности).
Определяем, через какую сторону или вершину выходит из квадрата окружность (допустим против часовой стрелки).
Думаю, это самая сложная часть алгоритма.
2) В зависимости от направления выхода вычисляем координаты следующего квадрата - это координаты предыдущего квадрата, измененные на шаг сетки (по +x, +y или +x&+y - итого 8 вариантов).
Вычисляем квадраты по цепочке до тех пор, пока не наткнемся на первый квадрат последовательности.

Последний раз редактировалось Li6-D, 02.12.2011 в 22:14.
Li6-D вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Квадрантное представление окружности на AutoLISP

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать чертежей autocad, окружности печатаются квадратитками? vbold AutoCAD 5 29.11.2011 16:10
Как определить координаты начала и конца отрезка, координаты центра окружности? voverrr Программирование 6 20.01.2011 20:10
Рисование окружности (фантом окружности) Малюк AutoCAD 6 01.02.2010 02:26
DwgRuLispLib: Геометрия. Пересечение прямой и окружности VVA Библиотека функций 1 07.12.2007 18:59
Окружности, касательные к прямой и другой окружности Хмурый AutoCAD 13 06.03.2007 10:16