Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49

Определение координат линии в условных единицах

13.12.2017, 10:53. Показов 2437. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро форумчане.
Помогите с решением.

Есть макрос, строящий диаграмму по внешнему виду фигуры-линии (правда линия строится - зеркально перевернутой, но это не страшно).
Однако тут есть нюанс.
Этот макрос, в качестве единиц измерения - использует пойнты.
А требуется использовать не пойнты, а какие-то свои условные единицы.

Как определить координаты узлов линии - по условным единицам измерения ?
(В файле - я подсветил ячейки с условными координатами Х и Y - желтым цветом. И показал - как должна выглядеть диаграмма в таком случае.)
Вложения
Тип файла: xls 342576454.xls (66.5 Кб, 3 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2017, 10:53
Ответы с готовыми решениями:

Сумма прописью в условных единицах, 4 знака после запятой
Добрый день пытаюсь переделать функцию прописью под условные единицы. Возникла проблема 0,1000 пишет нуль цілих, десять десятих умовних...

Массивы: определение координат точки, наиболее приближенной к началу координат
На плоскости 100 точек заданы своими координатами Х, Y. Составить программу для определения координат точки, наиболее приближенную к началу...

Уравнение линии в полярной системе координат
линия задана уравнением r=r(n) в полярной системе координат нужно а. построить линию по точкам от n=0 до n=2пи и придавать...

30
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
14.12.2017, 19:24
mv6677, если ваши условные единицы не биткойны, а из более приземлённых единиц (см мм и т.д), то
Application.CentimetersToPoints(100) даст вам число пойнтов в 100 см. Разделите на него ваши пойнты и умножите на 100 получите значение в сантиметрах, умножите на 1000 получите в мм, умножите на 1000000 в микронах
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
14.12.2017, 22:40  [ТС]
Burk, ну какие биткойны, о чем вы говорите ?
Я же прикрепил файл, где все детально описано.

Просто имеющийся макрос - определяет координаты на листе - для каждого узла полилинии.

А я спрашивал - как эти координаты прописать теми числами по Х и Y, которые находятся в желтых ячейках диапазона F32:V49.
(То есть не микроны и не сантиметры - а обычные числа, которые записаны в желтых ячейках - соответственно для осей Х и Y)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
15.12.2017, 13:02
mv6677, я правильно понял, что вы хотите оси координат(желтенькие) сделать соответствующими вашей таблице данных с "ровным" шагом по осям в соответствии с максимальными значениями осей и всё?

Добавлено через 7 минут
mv6677, тогда надо знать высоту и ширину графика в ячейках экселя

Добавлено через 10 минут
mv6677, а с другой стороны, если вы уже построили стандартными средствами эксель правый график, в котором уже все оси соответствуют данным вашей таблицы, то зачем вам нужен левый (желтенький) график?

Добавлено через 1 час 41 минуту
mv6677, если я всё правильно понял, то работает такой макрос (перед запуском очистите все желтые ячейки, чтобы посмотреть результат работы макроса) Предполагалось, что Y и X положительны. При необходимости можно адаптировать и под отрицательные. Все сделано под ваши данные из файла
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub vCell()
Dim I As Integer
Dim Xmax As Integer, Ymax As Integer, Xmin As Integer, Ymin As Integer
Xmin = 10000: Xmax = 0
For I = 32 To 36
  If Cells(I, 26) < Xmin Then Xmin = Cells(I, 26)
  If Cells(I, 26) > Xmax Then Xmax = Cells(I, 26)
Next
nmix = (Xmin \ 5 + IIf(Xmin Mod 5 > 0, -1, 0)) * 5 'первое значение по Х
nmax = (Xmax \ 5 + IIf(Xmax Mod 5 > 0, 1, 0)) * 5  'последнее
Ymin = 10000: Ymax = 0
For I = 32 To 36
  If Cells(I, 27) < Ymin Then Ymin = Cells(I, 27)
  If Cells(I, 27) > Ymax Then Ymax = Cells(I, 27)
Next
nmiy = (Xmin \ 10 + IIf(Xmin Mod 10 > 0, -1, 0)) * 10 'первое значение по Y
nmay = (Ymax \ 10 + IIf(Ymax Mod 10 > 0, 1, 0)) * 10  'последнее
For I = 0 To (nmax - nmix) / 5
  Cells(49, 7 + I) = nmix + 5 * I
Next
For I = 0 To (nmay - nmiy) / 10
  Cells(48 - I, 6) = nmiy + 10 * I
Next
End Sub
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
15.12.2017, 15:20  [ТС]
Burk, я не совсем понял - что именно делает этот макрос.

Я жму на кнопку и в пустых желтых ячейках - появляются числа.
Но ведь числа там - и так уже были - зачем макросом их вписывать заново ?

Я спрашивал - про выписывание координат узлов полилинии - в таблицу Z32:AA46.

А координаты - макрос по идее должен доставать из тех самых желтых ячеек.
Так что - не нужно их удалять, иначе как макрос будет определять координаты узлов.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.12.2017, 16:05
рассчитать коэффициенты и смещения. приблизительно:
Visual Basic
1
2
        p(i).X = po(1, 1) / 5 - 20
        p(i).Y = 220 - po(1, 2) / 1.3
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
15.12.2017, 16:12
mv6677, вы очень непонятно ставите задачу. Вы полагаете, что если вам, имеющему полное представление о том, что вам надо, всё ясно, то и остальные по вашим отрывочным фразам должны тоже понять. Я понял, что желтым обозначено то, что вы хотите получить. А удалить желтое надо было для того, чтобы проверить работу моего макроса. Так что забудьте всё, что я писал. Удачи вам.
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
15.12.2017, 16:31  [ТС]
Цитата Сообщение от Burk Посмотреть сообщение
А удалить желтое надо было для того, чтобы проверить работу моего макроса.
Так макрос-то этот - что именно делает ?

Цитата Сообщение от Burk Посмотреть сообщение
вы очень непонятно ставите задачу
Я же описал задачу - предельно детально.

В данном случае - у "Полилинии10" - пять узлов.
Первый узел: Координата Х - по желтой ячейке - число 0. Координата Y - по желтой ячейке - число 10.
Второй узел: Координата Х - по желтой ячейке - число 10. Координата Y - по желтой ячейке - число 90.
Третий узел: Координата Х - по желтой ячейке - число 35. Координата Y - по желтой ячейке - число 40.
Четвертый узел: Координата Х - по желтой ячейке - число 60. Координата Y - по желтой ячейке - число 130.
Пятый узел: Координата Х - по желтой ячейке - число 70. Координата Y - по желтой ячейке - число 110.

И эти числа - копируются в диапазон Z32:AA46.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 04:58
mv6677, ну это понятно с самого начала, что у вас есть узлы некой кривой. А может просто построить аппроксимацию (например, квадратичную) по вашим узлам без графика и определять, нужные вам значения в промежуточных точках по этой аппроксимации или вас так не устроит? Тогда нужно график записать в формате типа BMP и смотреть по изменению цвета пикселей. Но я с этим не работал.
Цитата Сообщение от mv6677 Посмотреть сообщение
Так макрос-то этот - что именно делает ?
Для того, чтобы узнать, что он делает нужно зачистить желтые ячейки и запустить его. А потом не сохранять файл.
Как и вы пишете, я в предыдущих постах всё описал предельно ясно
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 11:48  [ТС]
Burk, насчет проверки пикселей - это что-то неимоверно сложное.
Я имел ввиду другое.

Вот примерный алгоритм.

(Уже имеется макрос определения координат узлов "Полилинии10".)
Для первого узла:
1) Определяются координаты первого узла (162,600).
2)Затем определяется адрес ячейки, которая стоит в этих координатах (G47).
3)Затем для найденной ячейки - макрос определяет первую желтую ячейку по горизонтали влево (F47) и копирует находящееся в ней число - в диапазон Z32:AA46. (Это новая координата Y - по желтой ячейке - число 10, которое надо вписать в таблицу).
4)Затем для найденной ячейки - макрос определяет первую желтую ячейку по вертикали вниз (G49) и копирует находящееся в ней число - в диапазон Z32:AA46. (Это новая координата X - по желтой ячейке - число 0, которое надо вписать в таблицу).

Это для первого узла.
Как хотя бы - только для первого узла "Полилинии10" - вписать координаты в диапазон Z32:AA46 ?

(это должны быть числа X=0, Y=10)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 13:20
mv6677, ну наконец-то мы подходим к чему-то осязаемому! Конечно пиксели это не очень просто. Забудем.
Давайте все пояснения вести для желтого графика, а то их у вас их там много.
Цитата Сообщение от mv6677 Посмотреть сообщение
Определяются координаты первого узла (162,600).
Хотелось бы знать, что за единицы 162, 600 (в таблице таких не вижу). Это координаты в пойнтах, а вам надо получить их в ваших единицах??? Если так, то задача достаточно простая, но подожду вашего ответа.
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 14:09  [ТС]
Цитата Сообщение от Burk Посмотреть сообщение
Хотелось бы знать, что за единицы 162, 600 (в таблице таких не вижу).
Имеющийся макрос, определения координат Полилинии в пойнтах- уже делает часть работы.

1)Нужно ввести в красную ячейку Z5 название Полилинии и нажать на кнопку уже имеющегося макроса. И в диапазон Z9:AA24 - впишутся координаты всех узлов указанной Полилинии - в пойнтах.
Эта часть макроса - уже работает.

2)Затем определяется адрес ячейки, которая стоит в этих координатах (G47). (То есть макрос должен заглянуть в первую строчку диапазона Z9:AA24 и взять оттуда координаты в пойнтах - для первого узла.)
(Иными словами диапазон Z9:AA24 - он как бы промежуточный. Там находятся координаты узлов Полилинии - в пойнтах)

3)Затем для найденной ячейки первого узла (G47) - макрос определяет первую желтую ячейку ПО ГОРИЗОНТАЛИ ВЛЕВО (F47) и копирует находящееся в ней число - в диапазон Z32:AA46. (Это новая координата Y - по желтой ячейке - число 10, которое надо вписать в таблицу).

4)Затем для найденной ячейки первого узла (G47) - макрос определяет первую желтую ячейку ПО ВЕРТИКАЛИ ВНИЗ (G49) и копирует находящееся в ней число - в диапазон Z32:AA46. (Это новая координата X - по желтой ячейке - число 0, которое надо вписать в таблицу).

Добавил файл - где все - вообще подробно расписал.
Вложения
Тип файла: rar 8458458.rar (40.1 Кб, 5 просмотров)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 16:27
mv6677, вы старайтесь отвечать на поставленный вопрос. Вопрос был - перевести пойнты в ваши условные единицы? Ваш ответ должен был быть ДА без ваших пунктов в послании и рисований красивых графиков.
Ширина ваших ячеек 24.75 пойнта, высота 12,75. Шкала условных единиц по Х начинается с нуля, поэтому из пойнтов по Х вычитаем меньший (161) делим на 24.75 и умножаем на 5 (число условных единиц по Х в одной ячейке). На примере последнего Х 505-161=344 344/24.75*5=69,5 почти 70 но это из-за возможного небольшого смещения точек, а скорее из-за округления ширины ячейки до двух знаков. По У сделайте сами. Думаю, что и без пойнтов можно обойтись, имея исходные значения. Мой макрос это и делает
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 16:52  [ТС]
Цитата Сообщение от Burk Посмотреть сообщение
Ширина ваших ячеек 24.75 пойнта, высота 12,75.
а при чем тут ширина и высота ячеек ?

Ячейки могут быть - совершенно любой ширины и высоты.

Цитата Сообщение от Burk Посмотреть сообщение
Шкала условных единиц по Х начинается с нуля
Шкала условных единиц - ни с чего не начинается - я могу вписать туда - любое число.

В желтые ячейки - могут быть вписаны ЛЮБЫЕ числа.
Я спрашивал не про то, как учесть высоту и ширину желтых ячеек, а про то как извлечь конкретное число из конкретного адреса в ряду желтых ячеек и скопировать его - в диапазон Z32:AA46.

Например по оси Х - я могу вручную вписать - числа 100,200,300,400,500,600,700 (ряд по возрастанию).
Или вписать по оси Х - числа 200,600,100,400,300,100,800 (ряд случайных чисел).
Макрос - выхватит одно из этих чисел, которое соответствует той ячейке, что находится под узлом Полилинии.

Что именно вписано в желтые ячейки - совершенно неважно. Важно только эти числа из желтых ячеек, соответствующие узлам Полилинии - скопировать в диапазон Z32:AA46.
И все - больше ничего делать не надо.
Хотя бы для одного узла.

Я же специально в последнем файле - нарисовал подробнейшую схему.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 17:07
mv6677,
Цитата Сообщение от mv6677 Посмотреть сообщение
а при чем тут ширина и высота ячеек ?
Ячейки могут быть - совершенно любой ширины и высоты.
чтобы пойнты перевести в условные единицы при помощи свойств Width Height
Узлы вашей линии должны быть в исходной таблице, вы же из чего-то строили графики, оттуда и переносите данные узлов преобразовав их в ваши условные.
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 17:56  [ТС]
Цитата Сообщение от Burk Посмотреть сообщение
Узлы вашей линии должны быть в исходной таблице
О какой исходной таблице идет речь ?

У меня нет никакой исходной таблицы.
Есть только одна фигура-Полилиния - в качестве исходных данных - кроме нее других исходных данных нет.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 18:03
mv6677, надеюсь, что первая таблица с пойнтами у вас всё-таки есть, иначе говорить не о чем.
Предположим, что в пойнтах ваша шкала (на примере Х) от 100 для 600. Значит размах шкалы = 500 пойнтов. В условных единицах от 0 до 2000. Следовательно на один пойнт приходится 2000/500=4 УЕ. Ваше значение в некотором узле по Х = 300
Следовательно в УЕ оно будет 300*4=1200. Аналогично по У. А вот куда эти значения надо вставить, тут уж сами решите
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 18:41  [ТС]
Цитата Сообщение от Burk Посмотреть сообщение
Значит размах шкалы = 500 пойнтов
О каком "размахе шкалы" - вы говорите ?
Я же писал в предыдущих сообщениях - что числа в желтых ячейках могут стоять вообще любые.

Вот скажите - в этом ряде чисел : 200,600,100,400,300,100,800 - какой размах шкалы ?
Здесь такого понятия в принципе нет.

Если уж на то пошло - то вместо чисел - может вообще текст стоять.

Я спрашивал о том - как содержимое ячеек - каким бы оно ни было - скопировать в диапазон Z32:AA46 для соответствующего узла.

Сейчас в желтых ячейках - для первого узла - по оси X (G49) и Y (F47)- стоят числовые значения "0" и "10". Вот эти значения и надо перенести в диапазон Z32:AA46.
А если бы в этих желтых ячейках для первого узла стоял бы текст "Текст-1" и "Текст-2" - то в диапазон Z32:AA46 - вместо чисел - скопировались бы текстовые значения "Текст-1" и "Текст-2".
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
16.12.2017, 19:32
Цитата Сообщение от mv6677 Посмотреть сообщение
Вот скажите - в этом ряде чисел : 200,600,100,400,300,100,800 - какой размах шкалы ?
800-100=700
0
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 49
16.12.2017, 19:40  [ТС]
Burk,
А в этом ряду значений какой размах шкалы: 200,"Текст-1",100,400,300,"Текст-2",800?
(Только не говорите, что 700)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2017, 19:40
Помогаю со студенческими работами здесь

Узнать координат линии в Chart1LineSeries по оси
У меня такой вопрос: чтобы код работал быстро нет смысла перелопачивать весь G-код, ну или часть, при корреляции, чтобы в конце слоя, до...

Найти сумму координат центра линии
Искал в нете но ничего подобного не нашёл покажите кто шарит на примере как правильно: 9{x}^{2}-4{y}^{2}-18x-16y-43=0 Добавлено...

Дано уравнение линии в полярной системе координат
Дано уравнение r= 1 + cos2фи линии в полярной системе координат. Надо: 1) определить точки, лежащие на линии, давая значения...

Используя DrawLines и цикл прорисовать линии по массиву координат
прогоняю только по счётчику i потому что если ещё использую счётчик j то происходит ошибка выхода за пределы массива. а в даННом варианте...

Построить линии, определяемые уравнениями в декартовой системе координат Oxy
Здравствуйте. Нужна помощь с задачей: построить линии, определяемые уравнениями в декартовой системе координат Oxy. Что тут вообще нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru