Нужна формула, рассчитывающая число узлов заданной сетки внутри заданной фигуры без их построения. Линии начала отсчёта сетки проходят по крайней левой и нижней точкам. Условия: 1. Форма фигуры может быть разная (прямоугольник/квадрат, треугольник, эллипс/круг, сектор) 2. Площадь фигуры может быть разная 3. Шаг сетки может быть разный (2х2, 10х10, 50х25 м) Исходные данные: а) Форма фигуры (значения: "прямоугольник"; "треугольник"; "эллипс"; "сектор") б) Площадь фигуры (м2) в) Данные для построения (соответственно 2 стороны; сторона и прилежащий угол; 2 радиуса; радиус и длина дуги) Желаемый результат: =UDF(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2) = ХХХ точек.
Если участок произвольной формы, то и измерений длины и ширины у него не два параметра, а больше, иначе как вы определите, что он неправильный? От этого и танцуйте - разбивайте на 2 правильных, а там не сложно.
Dima S, моё решение основано на числе квадратов, и не является универсальным. Надо что-то типа такого: =UDF(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2)
Это точно. Такая у меня работа... При этом всё надо уже вчера. Пока примерно определился, как это делать вручную: 1. Строим фигуру 2. Строим сетку 3. Совмещаем и подсчитываем точки внутри и на границе фигуры
А вот как это написать программно в виде UDF - большой вопрос...
задание не совсем понятное что есть "число узлов" для круга? в вашем примере есть не только прямоугольники, но и ломаные многоугольники. решение вы хотите формульное или графическое?
Что, если сделать так: 1. Берём шаг сетки и считаем его площадь (для простоты пусть будет кирпичик 100 м2) 2. "Строим" квадрат, описывающий фигуру, считаем его площадь и делим на площадь кирпичика (н-р, в него убралось 10 кирпичиков) 3. Вычитаем из площади квадрата площадь нашей фигуры и делим на площадь кирпичика (к примеру, "вылетает" 1 кирпичик) 4. Получаем число кирпичиков 9 шт. (10 - 9) 5. Считаем число узлов как ОКРУГЛ(9+(2*9^0,5+1);0) = 16 Правильно?
Сейчас не имею доступа к пк, но есть ещё один вопрос - линии начала отсчета сетки проходят по центральным осям фигур, или по крайних левой и нижней точках?
вы опять изменили входящие данные) но это оказалось на руку) вот, смотрите. функция принимает входные параметры: массив х,у максимальное значение сетки по оси х шаг по осе х максимальное значение сетки по оси у шаг по осе у
методика не ваша. по моей методике вычисляем координаты узлов сетки и проверяем, попадает ли узел внутрь фигуры методом трассировки луча. функция трассировки не моя - найденная на просторах интернета, но я ее допилил.
Теоретически - должно считать количество узлов для фигуры любой формы, заданной координатами.
Dima S, я так понял: =кол_узлов(массив_XY;max_X;шаг_X;max_Y;шаг_Y) Отличный вариант для детального исследования. Спасибо!
Но мне нужна формула, работающая при минимальном объёме вводных данных: =кол_узлов(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2). Информации по координатам на этом этапе у меня просто нет. )
Данные/задачу я не менял, просто для теста вместо автофигур построил графики. )
б) при работе в AutoCAD ...... Вы уж мне поверьте, я на этом собаку съел. )))
Средствами автокада решается просто. Пишете свою UDF даже в Excel. Обращаетесь к объектной модели автокада,по массиву точек фигуры строите замкнутую область. Перебираете ваши кирпичики и проверяете ,что остается от вычитания объектов. Или через метод объекта IntersectWith находите точку пересечения узла.
Согласен. Кстати "при работе в AutoCAD ...... собаку съел." - неправильное понимание контекста сообщения, в котором говорится про txt-layer в PDF, выгруженном из AutoCAD'a.
Цитата
Doober написал: Обращаетесь к объектной модели автокада
Пока задачу надо решить без AutoCAD - не у каждого он есть и не всегда нужен. Сейчас нужна UDF; визуализация тоже уместна, но средствами Excel.
а в школе у меня по геометрии четверка была) хотя тут больше бы алгебра помогла, но я уже почти ничего не помню( вот, че то пробовал заморочиться, но на сектор меня уже не хватило) там еще и угол поворота надо учитывать... ну и с эллипсом тоже не подружился я) вышло только с окружностью) зато допилил еще функцию подсчета по точкам) может кому будет интересно, может кто поможет и с сектором и эллипсом)
Насколько могу вспомнить геометрию, нужно найти радиус и угол между крайними точками хорды. Высота сегмента, продленная до центра окружности, дает радиус. Через прямоугольные треугольники и синус получаем искомый угол и радиус.
Хотелось бы понять: 1. Правильно ли сделано то, что есть? 2. Как доработать блок B:C так, чтобы можно было удалить временные блоки? Файл тут: https://yadi.sk/i/FtdpkFYZfvgq3
Доработал и оформил файл. Сейчас Excel строит и анализирует участок на заданной сетке. Простые участки строятся по базовым данным; сложные - задаются координатами (при их наличии). Для теста произвольную фигуру можно генерировать.
Что хотелось бы получить: 1 Построить сегмент по хорде и высоте. Сам смог сделать только полукруг. ((( 2 Расчёт координат участка, сетки и её контура ведётся в таблицах 1-3. Хотелось бы убрать их в массив VBA, и по нему уже проводить анализ и строить график. Пример построения диаграммы по массиву - Sub Test(). 3 Анализ (подсчёт узлов, периметра и площади) выполняют 3 функции. Хотелось бы объединить их в одну UDF. 4 Генератор фигур работает достаточно примитивно. Хотелось бы как-то его улучшить.