Страницы: 1
RSS
Расчёт числа узлов сетки
 
Здравствуйте!

Нужна формула, рассчитывающая число узлов заданной сетки внутри заданной фигуры без их построения.
Линии начала отсчёта сетки проходят по крайней левой и нижней точкам.
Условия:
1. Форма фигуры может быть разная (прямоугольник/квадрат, треугольник, эллипс/круг, сектор)  
2. Площадь фигуры может быть разная
3. Шаг сетки может быть разный (2х2, 10х10, 50х25 м)
Исходные данные:
а) Форма фигуры (значения: "прямоугольник"; "треугольник"; "эллипс"; "сектор")
б) Площадь  фигуры (м2)
в) Данные для построения (соответственно 2 стороны; сторона и прилежащий угол; 2 радиуса; радиус и длина дуги)
Желаемый результат:
=UDF(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2) = ХХХ точек.

Файл с примером.
Изменено: Acid Burn - 31.03.2015 22:27:40
 
Если участок произвольной формы, то и измерений длины и ширины у него не два параметра, а больше, иначе как вы определите, что он неправильный?
От этого и танцуйте - разбивайте на 2 правильных, а там не сложно.
 
Dima S, моё решение основано на числе квадратов, и не является универсальным.
Надо что-то типа такого: =UDF(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2)
Изменено: Acid Burn - 30.03.2015 20:51:01
 
Задания меняется быстрее, чем находятся решения :)

Изменено: Dima S - 30.03.2015 20:56:20
 
Это точно. Такая у меня работа... При этом всё надо уже вчера. :)
Пока примерно определился, как это делать вручную:
1. Строим фигуру
2. Строим сетку
3. Совмещаем и подсчитываем точки внутри и на границе фигуры

А вот как это написать программно в виде UDF - большой вопрос...
Изменено: Acid Burn - 30.03.2015 21:03:59
 
задание не совсем понятное
что есть "число узлов" для круга?
в вашем примере есть не только прямоугольники, но и ломаные многоугольники.
решение вы хотите формульное или графическое?
 
Постарался объяснить в файле.
Простите, сложно сформулировать задачу.

Upd1:
Дорисовал те самые "узлы"...

Upd2:
Что-то меня вообще перемкнуло. Как считаете, реально такое сделать?
Изменено: Acid Burn - 30.03.2015 22:08:26
 
Что, если сделать так:
1. Берём шаг сетки и считаем его площадь (для простоты пусть будет кирпичик 100 м2)
2. "Строим" квадрат, описывающий фигуру, считаем его площадь и делим на площадь кирпичика (н-р, в него убралось 10 кирпичиков)
3. Вычитаем из площади квадрата площадь нашей фигуры и делим на площадь кирпичика (к примеру, "вылетает" 1 кирпичик)
4. Получаем число кирпичиков 9 шт. (10 - 9)
5. Считаем число узлов как ОКРУГЛ(9+(2*9^0,5+1);0) = 16
Правильно?
Изменено: Acid Burn - 30.03.2015 22:36:28
 
Сейчас не имею доступа к пк, но есть ещё один вопрос - линии начала отсчета сетки проходят по центральным осям фигур, или по крайних левой и нижней точках?
Изменено: Dima S - 30.03.2015 22:58:58
 
Скорее всего по крайней левой и нижней точкам.

Upd1:
Переделал тестовый файл, реализовал в нём промежуточный вариант.
До встречи завтра. :)
Изменено: Acid Burn - 31.03.2015 00:18:23
 
Да, в геометрии я не силён... Кто-нибудь готов помочь?
 
вы опять изменили входящие данные)
но это оказалось на руку)
вот, смотрите.
функция принимает входные параметры:
массив х,у
максимальное значение сетки по оси  х
шаг по осе х
максимальное значение сетки по оси  у
шаг по осе у

методика не ваша.
по моей методике вычисляем координаты узлов сетки и проверяем, попадает ли узел внутрь фигуры методом трассировки луча.
функция трассировки не моя - найденная на просторах интернета, но я ее допилил.

Теоретически - должно считать количество узлов для фигуры любой формы, заданной координатами.
Изменено: Dima S - 01.04.2015 00:56:32
 
Dima S, я так понял:
=кол_узлов(массив_XY;max_X;шаг_X;max_Y;шаг_Y)
Отличный вариант для детального исследования. Спасибо!

Но мне нужна формула, работающая при минимальном объёме вводных данных:
=кол_узлов(Форма; Площадь; Размер1; Размер2; Шаг1; Шаг2).
Информации по координатам на этом этапе у меня просто нет. )

Данные/задачу я не менял, просто для теста вместо автофигур построил графики. )
 
я думаю имея радиус и координаты центра окружности либо параметры других фигур - не есть проблемой получить массив точек контура.
 
Dima, это для кого как. :) Поможете?
 
Цитата
Acid Burn написал: Dima, это для кого как
Не поверю, с автокадом то работаете.
Цитата
б) при работе в AutoCAD ......
Вы уж мне поверьте, я на этом собаку съел. )))
Средствами автокада решается просто.
Пишете свою UDF даже в Excel.
Обращаетесь к объектной модели автокада,по массиву точек фигуры строите замкнутую область.
Перебираете ваши кирпичики и проверяете ,что остается от вычитания объектов.
Или через метод объекта IntersectWith находите точку пересечения узла.
 
Цитата
Doober написал: Средствами автокада решается просто.
Согласен.
Кстати "при работе в AutoCAD ...... собаку съел." - неправильное понимание контекста сообщения, в котором говорится про txt-layer в PDF, выгруженном из AutoCAD'a.

Цитата
Doober написал: Обращаетесь к объектной модели автокада
Пока задачу надо решить без AutoCAD - не у каждого он есть и не всегда нужен.
Сейчас нужна UDF; визуализация тоже уместна, но средствами Excel.
 
Измаялся весь, не выходит каменный цветок...
 
Геометрию не хотите учить?
Могу за вас ее вспомнить.
Площадь во входных параметрах совсем не нужна,она может быть рассчитана в теле функции.
 
На основе чего она может быть рассчитана, если координат нет?
 
По указным  фигурам входных данных достаточно для расчета.
Если  фигура будет указана массивом точек - придется интегралы напрягать для расчета площади.

Исключение из ваших фигур,площадь эллипса , рассчитывается при помощи определенного интеграла.
 
Поясню. Расчёт числа узлов нужен для расчёта стоимости изысканий на участке.
Оценка делается в 2 этапа:

1. Предварительный (примерная стоимость работ)
Вводные данные: в лучшем случае форма, площадь и некоторые размеры участка.
Решение: пока отсутствует.

2. Детальный (точная стоимость, если Заказчика устроила предварительная)
Вводные данные: координаты точек участка (участков).
Решение: UDF, предложенная Dima S.

Скорее всего, UDF для "1 этапа" - частный случай решения "2 этапа".
Вот только написать такую UDF мне пока не под силу.
Изменено: Acid Burn - 05.04.2015 18:58:08
 
а в школе у меня по геометрии четверка была) хотя тут больше бы алгебра помогла, но я уже почти ничего не помню(
вот, че то пробовал заморочиться, но на сектор меня уже не хватило)
там еще и угол поворота надо учитывать...
ну и с эллипсом тоже не подружился я) вышло только с окружностью)
зато допилил еще функцию подсчета по точкам)
может кому будет интересно, может кто поможет и с сектором и эллипсом)
 
Dima S, спасибо Вам!
 
Пока получается вот так: https://yadi.sk/i/bNCHvfbUfvPWH.
Вроде бы прошёл все фигуры, кроме сегмента.
Изменено: Acid Burn - 12.04.2015 12:28:49
 
Подскажите, как рассчитать координаты точек на дуге сегмента, имея длину хорды и высоту сегмента?
Так?
Изменено: Acid Burn - 12.04.2015 12:33:47
 
Насколько могу вспомнить геометрию, нужно найти радиус и угол между крайними точками хорды. Высота сегмента, продленная до центра окружности, дает радиус. Через прямоугольные треугольники и синус получаем искомый угол и радиус.
F1 творит чудеса
 
Спасибо!

Хотелось бы понять:
1. Правильно ли сделано то, что есть?
2. Как доработать блок B:C так, чтобы можно было удалить временные блоки?
Файл тут: https://yadi.sk/i/FtdpkFYZfvgq3
Изменено: Acid Burn - 12.04.2015 14:41:23
 
Добавил генератор случайных фигур и построение графика по данным массива.
По-прежнему надеюсь на Вашу помощь, Господа!
 
Доработал и оформил файл.
Сейчас Excel строит и анализирует участок на заданной сетке.
Простые участки строятся по базовым данным; сложные - задаются координатами (при их наличии).
Для теста произвольную фигуру можно генерировать.

Что хотелось бы получить:
1 Построить сегмент по хорде и высоте. Сам смог сделать только полукруг. (((
2 Расчёт координат участка, сетки и её контура ведётся в таблицах 1-3.
Хотелось бы убрать их в массив VBA, и по нему уже проводить анализ и строить график.
Пример построения диаграммы по массиву - Sub Test().
3 Анализ (подсчёт узлов, периметра и площади) выполняют 3 функции.
Хотелось бы объединить их в одну UDF.
4 Генератор фигур работает достаточно примитивно.
Хотелось бы как-то его улучшить.

Файл:
https://yadi.sk/i/SR8ea5t1fvsLT
Страницы: 1
Наверх