Страницы: 1 2 След.
RSS
Промежуточные координаты крайних фигур (у множества фигур)
 
Вечер добрый, экселевских дел мастера.
Помогите решить непростой вопрос.

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

Как заставить этот макрос - определить координаты крайних фигур по направлениям - право-верх, право-низ, лево-низ, лево-верх?
(Эти направления - я называю неортогональными, поскольку они направлены - по диагонали)
 
В чём секрет? И я так понимаю, что определить нужно только координаты тех фигур, на которые указывают стрелки?.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Доброе время суток.
Alemox, тема родом отсюда. Вам вроде интересна такая тематика, может напишите код?
 
Alemox, ну в общем - да.
Обычные координаты крайних фигур - верхней,правой,нижней, левой  - уже определены.

Нужно к ним добавить координаты промежуточных фигур - тех, которые находятся в промежуточных направлениях.
Я указал на них стрелками.
 
Т.е. определять координаты не всех фигур правильно? Если координаты всех фигур то тут вообще проблем нет.
Код
может напишите код?
Да, мне нравится такая тематика. Может и напишу  :D  
Изменено: Alemox - 05.09.2017 08:38:36
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, не всех фигур, а только тех - которые находятся в крайних основных положениях  (уже есть) и  крайних промежуточных положениях.
(крайние фигуры в промежуточных положениях - я их пометил стрелочками)
Изменено: OlegSmirnov - 05.09.2017 09:18:02
 
В случае кружочков между 3 и 5. Координаты какого выносить надо 21 или 19? Или обоих?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, относительная координата какого-то из этих кружочков - обязательно будет немного больше чем у другого (или 21 или 19).
Ситуация, что они будут расположены - идеально симметрично относительно нижне-левой диагонали  -  весьма редкая.

Но если такая ситуация все же возникнет, пусть это будет фигура у которой координата x - больше (то есть фигура 19)
Изменено: OlegSmirnov - 05.09.2017 10:07:46
 
OlegSmirnov, а что такое координата фигуры - центр?
 
webley, да - координаты автофигуры в имеющемся макросе - это центр автофигуры.
 
а Вы уверены в правильности вот этой записи - по-моему, там должен быть "+"?
Код
a(i, 2) = ActiveSheet.Shapes(1).Top - ActiveSheet.Shapes(1).Height / 2
 
webley, сейчас главный вопрос - как определить крайние фигуры промежуточных направлений.
А это все - можно и потом подправить.
 
Ну вот попробуйте - так?
PS сохранил в формате excel 2007, т.к. файл по размеру не проходил
 
webley, посмотрел макрос.
Все работает как надо.
Огромное спасибо.
 
Одно замечание - макрос будет работать корректно только для случая, когда размеры фигур одинаковы и, возможно (не могу до конца сообразить), высота фигуры должна быть равна ее ширине.
Если это условие не выполняется, то оперировать надо не центрами фигур, а их верхним левым и нижним правым углами.

И если не секрет - для чего это все надо?  :sceptic:  
 
Я чуть припозднился чувствую. Ну, ничего. Внёс свою изюминку. Мой код может работать с любыми овалами.
Кстати если не будет промежуточного кружочка в области, например, между верхним и левым, то код отработает нормально.
Изменено: Alemox - 05.09.2017 15:12:58
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, не работает направление Право-Низ.
Там выдается значение фигуры Овал 10, когда максимальная относительная координата по этому направлению - это Овал 20.
 
Вы правы. Нашёл ошибку.
Поправил. Спасибо, что проверяете.
Изменено: Alemox - 05.09.2017 15:00:28
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, вот я показал примерно - где проходит промежуточная координата (пунктирная линия) и как сравнивается координата Овал10 и Овал20 на ней.
 
Ага поправил перезалил
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, направление по-прежнему не работает.
Подсвечивает Овал5, когда как должно подсветить Овал10
Пометил в файле фигуру.
 
Цитата
OlegSmirnov написал:
Подсвечивает Овал5, когда как должно подсветить Овал10
В данном случае Овал 5 находится дальше чем овал 10, поэтому и подсвечивает его. Тут сложно определить что именно из двух зол выбрать. Я алгоритм видел так, что чем дальше объект, он и определяется. В противном случае Вам придётся самим как-то дорабатывать алгоритм.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Я исходил из квадрата образуемого четырьмя крайними овалами
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
Я исходил из квадрата образуемого четырьмя крайними овалами
Я, кстати, примерно также (только в выложенной редакции квадрат проходит через центры крайних фигур), а потом определял расстояние от центра каждой фигуры к углу и брал наименьшее
 
Цитата
webley написал:
определял расстояние от центра каждой фигуры к углу и брал наименьшее
А я просто взял наименьшее к стороне квадрата. Можно конечно гипотенузу посчитать.  
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, так ведь даже если рассматривать - этот квадрат, образованный четырьмя крайними овалами :
даже там Овал5 - стоит явно ниже Овала10 - по диагонали (45 градусов от центра квадрата).
Изменено: OlegSmirnov - 05.09.2017 16:28:33
 
Цитата
OlegSmirnov написал:
Овал5 - стоит явно ниже Овала10
Вот именно поэтому 5. Я же не знаю на сколько градусов у вас ориентир идёт. Я думал ближайшее к стороне квадрата.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
Я же не знаю на сколько градусов у вас ориентир идёт
Если есть квадрат - значит есть координаты его центра и координаты правого нижнего угла.
Вот между этими двумя точками - и идет диагональ.
(а угол - это видимо функция  arccos( катет / гипотенуза ) )
Изменено: OlegSmirnov - 05.09.2017 16:14:49
 
Цитата
OlegSmirnov написал:
Если есть квадрат -
Offtop
Точно квадрат? Или это то, что вы так называете? Может стоит для обучения просмотретт учебник геометрии? Не только же учебник по VBA изучать (хотя что-то слабо и в это верится)
 
Андрей VG,
Цитата
Alemox написал:
Я исходил из квадрата образуемого четырьмя крайними овалами
Что вы постоянно ко мне придираетесь?
Страницы: 1 2 След.
Наверх