|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.03.2009, 23:51 | #11 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Хм..
Конечно, это только пример. Остальное на Ваше усмотрение. //Черные дыры существуют, и нет ничего плохого в отрицательной //площади, но это уже другая тема. |
21.03.2009, 09:52 | #12 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Набор 1: 1,0,0 2,1,2 3,3,3 4,2,1 Набор 2: (поменяли местами точки 2 и 4) 1,0,0 2,2,1 3,3,3 4,1,2 Во втором случае метод даст не верный результат.
С уважением, Алексей.
|
|
21.03.2009, 11:12 | #13 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Вот упрощённая реализация его метода средствами VBA: Код:
НаправлениеОбхода(1) Правильно было бы проверять также и остальные группы по 3 точки. Для массива из 5 точек это будут проверки НаправлениеОбхода(1) НаправлениеОбхода(2) НаправлениеОбхода(3) Пример во вложении: (нажмите зелёную кнопочку) |
|
21.03.2009, 11:45 | #14 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вот обновлённый вариант программы:
Теперь учитываются все точки: Код:
|
21.03.2009, 13:17 | #15 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
EducatedFool, понимаешь, когда ты мысленно обходишь фигуру по точкам, ты делаешь однозначный вывод - прошел за часовой стрелкой или против, так? так...
программа должна поступить аналогично. вижу такой алгоритм: слева от направления движения (на небольшом расстоянии) строим параллельный контур, считаем длину основного контура и дополнительного. если дополнительный короче - обход был против часовой стрелки, длиннее - за. В векторной алгебре все описано: как определить точку правее и левее вектора, как построить прямую параллельную заданной, как найти расстояние от точки до прямой и точку пересечения двух прямых. Сложностей не вижу, вижу только массу формул
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
21.03.2009, 13:40 | #16 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Если точки в массиве расположены в правильном порядке, то конечно. А если так? (пример во вложении) Цитата:
Честно говоря, увидев, что Вы начали отвечать в теме, предположил, что Вы предложите решение при помощи формул (Excel наверняка имеет формулу для вычисления определителей матрицы), но никак не думал, что существует другой алгоритм. И каждая из этих формул будет длиной метров по 10... Конечно, ничуть не сомневаюсь, что Вам по силам это реализовать Я тоже вижу массу, только не формул, а макросов, что и останавливает меня испробовать данный метод. Уж слишком много вычислений придётся делать... |
||
21.03.2009, 16:23 | #17 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Спасибо все!
На текущий момент считать площадь по трем (так сказать делать контрольный замер) и анализировать его результаты, мне кажется единственным возможным. Все мои идеи с треском провалились.... Может быть в будущем что нибудь придумаю иное... Но это уже будет в следующих версиях таблицы.
С уважением, Алексей.
|
22.03.2009, 12:14 | #18 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
1 находим самую левую точку(мин по Х)
2 если таких несколько, берем нижнюю из них(мин по Y) 3 вычисляем наклон между этой точкой и следующей за ней(наклон отрезка) 4 вычисляем тоже самое для предыдузей точки 5 если п3>п4 - по часовой стрелке, иначе - против |
22.03.2009, 13:30 | #19 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
площадь:
1 вычисляем наклон первого отрезка(между точками 1 и 2) создаем коллекцию(или массив), кот будет содержать координаты точек и углы(тангенсы) наклонов и их приращения . т.е. это будет такой пользовательский тип: type vpmn x as long y as long tn as double dn as integer end type записываем туда координаты первой точки и наклон 2 вычисляем наклон второго отрезка(между точками 2 и 3) добавляем новый элемент коллекции, записывая туда координаты точки номер 2 , наклон и разницу наклонов 2го и 1го отрезков 3 берем следующую точку.(при первом подходе это точка номер 4) если таковой не существует, то берем опять первую, устанавливаем флаг выхода из цикла 4 вычисляем наклон ,разницу с последним значением коллекции 5 если она отличается по знаку от последнего значения, то заменяем в коллекции последнее значение значениями, полученными в пп 3-4 площадь треугольника, определяемого последними тремя точками основного массива координат, накапливаем в переменной. повторяем с п4(т.е. не берем след точку, а считаем таковой уже имеющуюся) 6 (если знак приращения не изменился), добавляем новый элемент в коллекцию повторяем с п3 получившаяся коллекция описывает выпуклый многоугольник, его площадь легко вычислить, разбив на треугольники. затем из нее вычесть накопленную "лишнюю" площадь из п5. |
22.03.2009, 15:10 | #20 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
С углами должно работать, но с ними целый ряд гемора и всегда стараюсь свести работу с ними к минимуму. Не что подобное я пытался сделать с четвертями. И пока без успешно. Пока реализовал через контрольные подсчет площади, сегодня завтра еще прикину может что придумаю.
С уважением, Алексей.
Последний раз редактировалось tae1980; 22.03.2009 в 15:20. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Определение IP | IvanLex | HTML и CSS | 6 | 28.03.2008 07:46 |
Определение IP | IvanLex | Общие вопросы по Java, Java SE, Kotlin | 1 | 19.02.2008 09:12 |