| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
30.11.2011, 21:48 | #1 | |
Квадрантное представление окружности на AutoLISP
Регистрация: 30.11.2011
Сообщений: 17
|
||
Просмотров: 8539
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
А можно рисунок глянуть? Чего-то я ничего не понял...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 30.11.2011
Сообщений: 17
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Картинку приложи к посту. Подробности - в справке по форуму.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Если не размер, а именно количество квадратиков - то выкладывай свой "доскональный" алгоритм (описание алгоритма) - т.к. простой мне в голову не приходит (вижу вариант только примерно "прикидывать" размер и методом льва в африке проврять подошел или нет) хотя сегодня я уже конечно никакой писать не буду, если там только нет какой-нибудь хитрости с учетом что это именно круг - типа распределить вначеле центры - а размер сам понятен станет, вобщем завтра посмотрю (а может и напишу).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 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. |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Описаный выше алгоритм - это модификация алгоритма разбиения пространства, им не достичь ограничения на N квадратов в разбиении
Цитата:
Цитата:
Ну а так как ровно N квадратов таким алгоритмом всеравно не получить, лучше воспользоваться алгоритмом растеризации окружности Брезенхема, пощитав размер квадрата для примерного получения N, либо запросив от пользователя этот размер. |
|||
|
||||
Регистрация: 30.11.2011
Сообщений: 17
|
не обязательно N, нужно просто как-то дать возможность пользователю ввести требуемую точность.
|
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
То что ты описываешь расходиться само с собой - тебе нужно задать из скольки квадратов сделать приближение к окружности - описанный алгоритм этого не делает, если количество не так важно - его можно в пять раз короче написать - определись уж что нужно чтобы "абы как лишь бы быстро" или "в соответствии с требованиями" (а еще лучше напиши для чего оно тебе - быть может "тут вобще все по другому" ).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 30.11.2011
Сообщений: 17
|
Цитата:
|
|||
|
||||
Регистрация: 14.12.2010
Там, где мамонты жили ...
Сообщений: 224
|
Цитата:
__________________
Время – лучшее лекарство, лечит даже от жизни. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Толковый словарь русского языка под редакцией Т. Ф. Ефремовой
КВАДРАНТ квадрант [квадрант] м. 1) Сектор с центральным углом в 90 градусов; четвертая часть круга. 2) Старинный угломерный астрономический инструмент для измерения высоты небесных светил над горизонтом и угловых расстояний между светилами. 3) Прибор для измерения углов при вертикальной наводке артиллерийских орудий. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Я плачу - ты сходи в универ что-ли узнай чего нужно-то.
Offtop: А вобще по таким студентам "сапоги" плачут.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Формализую задачу насколько понял.
Пользователь указывает на чертеже круг и задает натуральное число, которое определяет сетку (т.е. на сколько частей ею делится вертикальный и горизонтальный радиусы круга). Алгоритм должен найти координаты покрывающих окружность (не круг) элементарных квадратов сетки, например, координаты их правого нижнего угла. Теперь направляющие косинусы решения: 1) Пусть один такой квадрат найден (в качестве первого квадрата можно принять правую квадрантную точку окружности). Определяем, через какую сторону или вершину выходит из квадрата окружность (допустим против часовой стрелки). Думаю, это самая сложная часть алгоритма. 2) В зависимости от направления выхода вычисляем координаты следующего квадрата - это координаты предыдущего квадрата, измененные на шаг сетки (по +x, +y или +x&+y - итого 8 вариантов). Вычисляем квадраты по цепочке до тех пор, пока не наткнемся на первый квадрат последовательности. Последний раз редактировалось Li6-D, 02.12.2011 в 22:14. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Печать чертежей 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 |