Вверх ↑
Этот топик читают: Гость
Ответов: 378
Рейтинг: 61
#1: 2011-11-12 09:52:07 ЛС | профиль | цитата
Есть исходные данные для графика. Все данные типа Real. По оси X есть пропущенный промежуток, а именно значения 22563.6 и 22563.7. В графике он прорисовывается (см. скриншот) и это отлично Но никак не возьму в толк - как мне снять массив получившихся значений и чтоб в этом массиве присутствовали пропущенные значения Поиск по форуму и по ~12.000 схемам (спасибо ser_davkin) не дал ничего по использованию точек ValuesX и ValuesY компонента PlotLines.

PlotLines.png
code_25757.txt

Я могу снимать массив данных, но в снятом массиве нет пропущенных значений.

Make(delphi)
ver(4.04 build 185)
Add(MainForm,2953706,483,217)
{
Width=725
Name="main"
Position=1
link(onCreate,4074890:doEnum,[])
}
Add(StrList,11676011,574,161)
{
@Hint=#15:Данные по оси Y|
Strings=#3:0.5|3:0.7|3:0.4|3:0.6|3:0.9|3:0.3|3:0.7|3:0.1|
AddHint(38,-43,102,13,@Hint)
}
Add(StrList,5323248,518,161)
{
@Hint=#15:Данные по оси X|29:22563.6 и 22563.7 - пропущены|
Strings=#7:22563.0|7:22563.1|7:22563.2|7:22563.3|7:22563.4|7:22563.5|7:22563.8|7:22563.9|
AddHint(-105,-60,157,26,@Hint)
}
Add(ArrayEnum,4074890,532,231)
{
link(onItem,4187283:doRead,[])
link(onEndEnum,8512348:doFor,[(574,244)(574,293)])
link(Array,5323248:Array,[])
}
Add(ArrayRW,4187283,588,231)
{
link(onRead,4872390:doAdd,[])
link(Array,11676011:Array,[])
link(Index,4074890:Index,[(601,220)(578,220)(578,270)(545,270)])
}
Add(PlotLines,4872390,630,231)
{
Grapher="plotter"
Point(ValuesX)
Point(ValuesY)
link(ValueX,4074890:Item,[(643,219)(625,219)(625,274)(538,274)])
}
Add(Plotter,12146470,630,175)
{
Width=717
Height=273
Align=5
Font=[Tahoma,7,0,0,204]
Name="plotter"
AxisColor=0
Grid=9
RightMargin=30
TopMargin=30
BottomMargin=30
}
Add(ChildForm,11083851,707,399)
{
}
BEGIN_SDK
Add(EditMulti,16257987,21,21)
{
WorkCount=1
DataCount=1
link(doWork1,1365315:doAdd,[(115,27)(115,97)])
}
Add(MainForm,9509833,35,105)
{
Left=35
Top=105
Width=198
Height=342
ShiftLeft=750
FormFastening="parent.main"
}
Add(Memo,1365315,210,91)
{
Width=190
Height=315
Align=5
ScrollBars=2
link(Str,16257987:Data1,[(216,56)(27,56)])
}
END_SDK
Add(FormatStr,7757964,665,399)
{
Mask="%1;%2"
link(onFString,11083851:doWork1,[])
link(Str1,12489202:Item,[])
link(Str2,13739040:Item,[(678,383)(692,383)])
}
Add(For,8512348,588,287)
{
End=7
link(onEvent,2609433:doEvent1,[])
AddHint(-98,20,21,13,Start)
AddHint(-98,39,21,13,End)
}
Add(ArrayRW,12489202,665,287)
{
link(Array,4872390:ValuesX,[(671,275)(636,275)])
}
Add(ArrayRW,13739040,686,336)
{
link(Array,4872390:ValuesY,[(692,270)(643,270)])
}
Add(Hub,2609433,630,287)
{
OutCount=3
link(onEvent1,12489202:doRead,[])
link(onEvent2,13739040:doRead,[(653,300)(653,342)])
link(onEvent3,7757964:doString,[(658,307)(658,405)])
}
И как быть если мне нужны промежуточные значения, например 22563.45
карма: 0
0
файлы: 1code_25757.txt [2KB] [102]
Ответов: 8930
Рейтинг: 823
#2: 2011-11-12 10:26:00 ЛС | профиль | цитата
kacmem, а кто сказал, что пропущенные точки есть в массиве Х? И вообще он (массив по Х) какой-то странный
МассивХ.jpg
карма: 19

0
файлы: 1МассивХ.jpg [66.1KB] [221]
Ответов: 378
Рейтинг: 61
#3: 2011-11-12 10:45:43 ЛС | профиль | цитата
Леонид писал(а):
кто сказал, что пропущенные точки есть в массиве Х?
А есть какой-либо способ их получить?
Леонид писал(а):
он (массив по Х) какой-то странный
Вторую схему посмотрите...
------------ Дoбавленo в 10.45:
Немного расскажу о задаче, может не в ту сторону копаю
Ось X - время, Y - значения датчика. Данные собираются и потом снимаются на обработку. Но Время не имеет постоянной периодичности и могут быть провалы во времени, поэтому необходима корректировка данных - сглаживание и снятие данных по-минутные периоды. С этим отлично справляется график, но вот как снять с него данные?
Может есть другой способ решить мою задачу?
карма: 0
0
Ответов: 8930
Рейтинг: 823
#4: 2011-11-12 10:46:03 ЛС | профиль | цитата
kacmem, я же сказал, что массив странный первые точки -- заданные и числятся в количестве точек массива, а остальное непонятно что и откуда
МассивХ_2.jpg
kacmem писал(а):
А есть какой-либо способ их получить?
есть, конечно, называется "пропорциональные поправки", хотя они могут быть не только "пропорционалными", но и более сложными
карма: 19

0
файлы: 1МассивХ_2.jpg [60.4KB] [217]
Ответов: 378
Рейтинг: 61
#5: 2011-11-12 10:49:15 ЛС | профиль | цитата
Леонид писал(а):
а остальное непонятно что и откуда
Да, есть такое, я тоже не пойму что за данные
Леонид писал(а):
называется "пропорциональные поправки"
Чем и как можно в HiAsm это сделать?
карма: 0
0
Ответов: 8930
Рейтинг: 823
#6: 2011-11-12 12:10:22 ЛС | профиль | цитата
kacmem писал(а):
Чем и как можно в HiAsm это сделать?
Компонентами из вкладки Логика
По двум соседним точкам -- пропорциональное, по трём-четырём... соседним точкам -- по уравнениям 2-й, 3-й... степени, да этих методов пруд пруди до разложения в ряд Фурье и не только зависит от поставленной задачи и от статистики по ранее выполненным измерениям.
карма: 19

0
Ответов: 378
Рейтинг: 61
#7: 2011-11-12 17:26:58 ЛС | профиль | цитата
Леонид писал(а):
Компонентами из вкладки Логика
Именно этим сейчас и занимаюсь Правда с формулами тяжко, но думаю получится (уже есть результаты). Решение выложу здесь - вдруг кому пригодится, а может кто и оптимизирует схему
карма: 0
0
Ответов: 8930
Рейтинг: 823
#8: 2011-11-12 18:51:19 ЛС | профиль | цитата
kacmem, для ознакомления с введением поправок по квадратичной интерполяции и решением системы трёх уравнений с тремя неизвестными через определители пример: intermediatevalues.rar
Здесь в качестве вводной применена функция SIN от 0 до 360 через случайные промежутки ~10 градусов, а выход через 1 градус (красный график -- ошибка в промиле)
карма: 19

1
файлы: 1intermediatevalues.rar [3.7KB] [86]
Голосовали:kacmem
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)