Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2020-07-10 19:08:28 ЛС | профиль | цитата
Есть поле на котором расположены точки, которые движутся в своём направлении, одна из точек так же движется как и остальные, но от её движения нужно вращать всё поле что бы она якобы постоянно двигалась вверх

какие есть варианты?, вращение картинки будет при помощи Img_Rotate. или как проще, рассчётом или вращением всего поля?


к примеру можно привести 2D радар, где есть много движущихся объектов, один из которых и есть главный, относительно которого нужно вращать этот радар (к сожалению сторон света куда смотрит главная точка нету, поэтому и решено было делать вращение от движения вперёд)

Редактировалось 2 раз(а), последний 2020-07-10 19:11:55
карма: 2

0
Ответов: 2059
Рейтинг: 132
#2: 2020-07-10 19:18:13 ЛС | профиль | цитата
Rysik, 2D?
тригонометрия Nein?

Редактировалось 1 раз(а), последний 2020-07-10 19:21:21
карма: 6

0
Ответов: 8921
Рейтинг: 823
#3: 2020-07-10 20:46:14 ЛС | профиль | цитата
flint2, у коллеги Rysik-а никогда не было понятных объяснений, он полагает, что все здесь экстрасенсы и знают, что он имеет ввиду. А экстрасенс у нас только один, да и тот в отпуске
Вот они движутся в своём направлении


Add(MainForm,2953706,98,49)
{
Width=419
Height=442
link(onCreate,8243245:doEvent1,[])
}
Add(Bitmap,3265275,602,77)
{
HWidth=400
HHeight=400
FillColor=12639424
Point(doCreate)
}
Add(Image,13198144,602,126)
{
Left=1
Top=1
Width=400
Height=400
link(Bitmap,14081719:Var2,[])
}
Add(StrList,1425023,385,28)
{
}
Add(Hub,8243245,147,63)
{
OutCount=3
link(onEvent1,4192883:doRandomize,[(277,69)(277,41)])
link(onEvent2,7933909:doFor,[(172,76)(172,34)])
link(onEvent3,9606730:doTimer,[(172,83)(172,97)])
}
Add(For,7933909,182,28)
{
End=31
link(onEvent,5666095:doFor,[])
}
Add(Random,4192883,287,28)
{
Min=50
Max=350
link(onRandom,15457826:doValue,[])
}
Add(For,5666095,231,28)
{
End=1
link(onEvent,4192883:doRandom,[])
link(onStop,15215970:doString,[(271,41)(271,76)])
}
Add(Memory,5433100,658,126)
{
Default=Integer(5)
}
Add(FormatStr,15215970,329,70)
{
Mask="%1;%2"
Point(FString)
link(onFString,1425023:doAdd,[(368,76)(368,34)])
link(Str1,15457826:Value1,[])
link(Str2,15457826:Value2,[])
}
Add(MemFifo,15457826,329,28)
{
}
Add(Hub,15415111,371,91)
{
link(onEvent1,3265275:doCreate,[])
link(onEvent2,15728628:doEnum,[])
}
Add(ArrayEnum,15728628,399,98)
{
link(onItem,14468835:doSplit,[])
link(onEndEnum,13198144:doLoad,[(452,111)(452,118)(508,118)(508,132)])
link(Array,7516933:Var2,[])
}
Add(Img_Point,7729692,455,196)
{
Size=5
Point(X)
Point(Y)
Point(Color)
Point(Size)
link(onDraw,7818610:doRandom,[])
link(Bitmap,14081719:Var1,[(461,145)(559,145)(559,117)])
link(X,1260520:Var2,[])
link(Y,9671250:Var2,[])
}
Add(GetDataEx,14081719,602,112)
{
link(Data,3265275:Bitmap,[])
}
Add(MultiStrPart,14468835,462,98)
{
link(onSplit,7729692:doDraw,[(501,104)(501,139)(445,139)(445,202)])
}
Add(Random,7818610,511,196)
{
Max=1
Mode=1
link(onRandom,12227552:doCalc,[])
}
Add(Random,6140609,602,196)
{
Max=1
Mode=1
link(onRandom,6277728:doCalc,[])
}
Add(MathParse,12227552,560,196)
{
DataCount=3
MathStr="(%1 - 0.5)*%2 + %3"
link(onResult,6140609:doRandom,[])
link(X2,1419246:Var1,[(573,187)])
link(X3,1260520:Var3,[(580,173)])
}
Add(MathParse,6277728,651,196)
{
DataCount=3
MathStr="(%1 - 0.5)*%2 + %3"
link(onResult,8044012:doString,[])
link(X2,1419246:Var2,[])
link(X3,9671250:Var3,[(671,166)])
}
Add(GetDataEx,1419246,658,182)
{
link(Data,5433100:Value,[])
}
Add(FormatStr,8044012,700,196)
{
Mask="%1;%2"
link(onFString,14757237:doWrite,[(746,202)(746,209)])
link(Str1,12227552:Result,[(706,187)(692,187)(692,236)(566,236)])
}
Add(ArrayRW,14757237,756,196)
{
link(Array,7516933:Var3,[(762,68)(594,68)(594,82)])
link(Index,15728628:Index,[(769,180)(412,180)])
}
Add(GetDataEx,7516933,399,77)
{
link(Data,1425023:Array,[])
}
Add(Timer,9606730,273,91)
{
Interval=50
Enable=1
link(onTimer,15415111:doEvent1,[])
}
Add(GetDataEx,1260520,462,168)
{
link(Data,14468835:Part1,[])
}
Add(GetDataEx,9671250,469,161)
{
link(Data,14468835:Part2,[])
}

Дальше-то что?
карма: 19

0
Ответов: 1343
Рейтинг: 31
#4: 2020-07-10 21:17:22 ЛС | профиль | цитата
да, так и движутся в своём направлении, но более прямо)), без рывков, а одной из этих точек управляем вручную, и вот относительно этой управляемой точки нужно вращать поле что бы при движении точки в любую сторону, на карте (радаре) она двигалась вверх (то есть поворачивать карту так что бы казалось что она двигается вверх) (очень прямое сравнение с мини картой из игр, если кто играл, понимает, как оно работает, только там есть ещё сторона света куда смотрит камера от обьекта а тут этого нет, поэтому поворачивать нужно исходя из того, куда движется точка, эту сторону и делать верхом радара)


дааааа, объяснять это не моё

Редактировалось 1 раз(а), последний 2020-07-10 21:20:11
карма: 2

0
Ответов: 1343
Рейтинг: 31
#5: 2020-07-12 02:46:21 ЛС | профиль | цитата
немного подумав, нашёл путь к решению - первое что нужно сделать, так это отцентрировать карту, что бы в центре была главная точка, второе это поочерёдно записывать в память координаты этой точки и от этого получим вектор и направление вектора, куда движется главная точка, далее нужно создать по верх поля ещё один вектор, а это от центра поля к верху поля, соответственно, после чего, нужно поворачивая картинку, совместить 2 этих вектора вместе, это и будет решение, но как проверять эти 2 вектора, что один на другом лежит
карма: 2

0
Ответов: 8921
Рейтинг: 823
#6: 2020-07-12 15:09:04 ЛС | профиль | цитата
Rysik, угол поворота карты однозначно определяется направлением (углом, обычно называемом вектором) скорости управляемой точки, никаких сравнений не надо
https://forum.hiasm.com/getfile/39075
1.5 Мб -- пара карт 600х600 *.bmp
(Чёрные точки отражаются от края, чтобы не убежали, красная управляется клавишами со стрелками вверх/вниз скорость от "0" до максимума, право/лево -- направление через 1 градус)
(Вообще надо двигать не красную точку, а карту. а точка должна быть в центре.)
карма: 19

0
Ответов: 2236
Рейтинг: 676
#7: 2020-07-12 17:39:36 ЛС | профиль | цитата
Леонид писал(а):
Вообще надо двигать не красную точку, а карту. а точка должна быть в центре.
Во во!
Вот так и сделал точка стоит себе в центре и "смотрит" вверх, а всё вокруг нее вертится. Вот только вертеть "дешевле" сам холст перед отрисовкой, чем потом все изображение как у Леонид-а.
Схема (W - двигаться, A,D - поворот, Space - остановить движение точек

Add(Timer,9568122,84,217)
{
Interval=33
link(onTimer,16296757:doRefresh,[])
}
Add(MainForm,7072142,91,161)
{
Width=711
Height=458
Position=1
}
Add(PaintBox,16296757,126,217)
{
Width=700
Height=400
Color=16777215
ClearBeforeDraw=0
link(onBeforeDraw,3450544:doEvent1,[])
}
Add(Img_Point,9351544,763,441)
{
Color=16711680
Size=3
Point(X)
Point(Y)
link(onDraw,12696735:doEvent,[])
link(Bitmap,3013644:getVar,[])
link(X,8072376:Var1,[(776,369)])
link(Y,7920251:Var1,[(783,418)])
}
Add(Math,5147421,315,203)
{
Op2=2
Default=250
link(onResult,6669566:doWork2,[])
link(Op1,854946:Var2,[])
}
Add(Memory,9756808,378,203)
{
Default=Integer(0)
MakeExt(Default,,Y)
AddHint(1,-21,21,13,Default)
}
Add(Math,16455664,301,238)
{
OpType=1
Op2=2
Default=250
link(onResult,6669566:doWork3,[(359,244)])
link(Op1,854946:Var1,[(307,189)])
}
Add(Keyboard,6864804,217,231)
{
Key=68
link(onReadKey,1318274:doEvent,[])
}
Add(IndexToChanel,1318274,259,231)
{
link(onEvent2,16455664:doOperation,[])
}
Add(Keyboard,2734219,217,196)
{
Key=65
link(onReadKey,14052412:doEvent,[])
}
Add(IndexToChanel,14052412,259,196)
{
link(onEvent2,5147421:doOperation,[])
}
Add(Keyboard,9264453,217,154)
{
Key=87
link(onReadKey,7965526:doEvent,[])
}
Add(IndexToChanel,7965526,259,154)
{
link(onEvent2,8415989:doCalc,[])
}
Add(Hub,3450544,168,217)
{
OutCount=6
link(onEvent1,9264453:doReadKey,[(192,223)(192,160)])
link(onEvent2,2734219:doReadKey,[(200,230)(200,202)])
link(onEvent3,6864804:doReadKey,[])
link(onEvent4,7645734:doSetTransform,[(211,244)(211,363)])
link(onEvent5,7645734:doResetTransform,[(200,251)(200,370)])
link(onEvent6,8884940:doReadKey,[(194,258)(194,510)])
}
Add(Img_UseOffset,6583126,469,203)
{
X=-350
Y=-200
link(X,8415989:Result,[])
link(Y,11955774:Result,[(489,198)(524,198)])
}
Add(Img_UseRotate,8859586,371,252)
{
Angle=0
link(Angle,14427750:Var2,[])
}
Add(StrList,12969089,728,252)
{
Strings=#11:101,103,0,0|9:20,45,1,0|10:300,26,2,0|10:135,67,1,0|11:335,127,3,0|11:555,227,0,0|10:55,327,2,0|11:245,200,3,0|11:300,100,2,0|11:500,200,1,0|11:400,300,3,0|11:121,103,1,0|9:28,45,2,0|10:310,26,3,0|10:165,67,2,0|11:315,127,1,0|11:515,227,2,0|10:51,327,3,0|11:235,200,1,0|11:303,100,0,0|11:504,200,2,0|11:404,300,0,0|
}
Add(ArrayEnum,13336943,665,364)
{
link(onItem,11959826:doEvent1,[])
link(Array,2949624:Var1,[(671,299)])
}
Add(Img_Point,11768602,427,364)
{
X=350
Y=200
Color=16711935
Size=5
Point(X)
Point(Y)
link(onDraw,4487587:doDraw,[])
link(Bitmap,16505516:getVar,[])
}
Add(LineBreakEx,16505516,427,329)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,2483627,126,266)
{
Caption="bmp"
Type=3
link(_Data,16296757:Bitmap,[])
}
Add(LineBreakEx,124505,343,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,2075203,301,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,3231849,259,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,3013644,763,392)
{
Caption="bmp"
Type=2
}
Add(Hub,11959826,707,364)
{
OutCount=4
link(onEvent1,13845065:doSplit,[(772,370)(772,335)])
link(onEvent2,13657560:doSplit,[])
link(onEvent3,9351544:doDraw,[(755,384)(755,447)])
link(onEvent4,3352261:doEvent,[(730,391)(730,566)])
}
Add(Img_Line,1128388,301,357)
{
Point1=-1000
Point2=1000
LineStyle=2
link(onDraw,10826445:doDraw,[])
link(Bitmap,2075203:getVar,[])
}
Add(Img_Line,10826445,343,357)
{
Point1=-65536000
Point2=65536000
LineStyle=2
link(onDraw,10774283:doSetTransform,[])
link(Bitmap,124505:getVar,[])
}
Add(Img_Text,623198,259,357)
{
X=-6
Y=-120
Font=[MS Sans Serif,12,1,0,1]
Text="N"
link(onDraw,1128388:doDraw,[])
link(Bitmap,3231849:getVar,[])
}
Add(Img_SetTransform,7645734,217,357)
{
Point2=26215100
link(onSetTransform,623198:doDraw,[])
link(onResetTransform,10774283:doResetTransform,[])
link(Bitmap,14303955:getVar,[])
link(Transform,8859586:Transform,[(244,295)(377,295)])
}
Add(LineBreakEx,14303955,217,322)
{
Caption="bmp"
Type=2
}
Add(Img_SetTransform,10774283,385,357)
{
Point2=26215100
link(onSetTransform,1304847:doFor,[])
link(onResetTransform,11768602:doDraw,[])
link(Bitmap,4929607:getVar,[])
link(Transform,15911165:Transform,[(412,296)(475,296)])
}
Add(LineBreakEx,4929607,385,322)
{
Caption="bmp"
Type=2
}
Add(Img_UseRotate,15911165,469,252)
{
Angle=0
link(AddTransform,6583126:Transform,[])
link(Angle,14241382:Var3,[(482,243)])
}
Add(MathParse,8415989,476,161)
{
DataCount=1
MathStr="2 * sin (%1/180*pi) + %0"
Default=-350
link(onResult,11955774:doCalc,[])
link(X1,9143755:Var2,[])
}
Add(MathParse,11955774,518,161)
{
DataCount=1
MathStr="2 * cos (%1/180*pi) + %0"
Default=-200
link(X1,9143755:Var3,[(524,149)])
}
Add(HubEx,6669566,355,203)
{
link(onEvent,9756808:doValue,[])
}
Add(GetDataEx,14427750,378,238)
{
link(Data,9756808:Value,[])
}
Add(GetDataEx,854946,315,184)
{
Angle=1
link(Data,14427750:Var1,[(366,189)(366,243)])
}
Add(GetDataEx,9143755,476,144)
{
Angle=3
link(Data,14241382:Var1,[(433,149)])
}
Add(Random,10236209,931,560)
{
Max=3
link(onRandom,11892796:doStrCat,[])
}
Add(IndexToChanel,12696735,812,441)
{
Count=4
Point(Index)
link(onEvent1,5445148:doOperation,[])
link(onEvent2,1951545:doOperation,[(863,454)(863,468)])
link(onEvent3,2324044:doOperation,[(855,461)(855,489)])
link(onEvent4,8084396:doOperation,[(850,468)(850,510)])
link(Index,2207095:Var2,[])
}
Add(Math,5445148,875,441)
{
Op2=1
link(onResult,7987341:doWork2,[])
link(Op1,8072376:Var2,[])
}
Add(Memory,9781029,1050,329)
{
Default=Integer(0)
MakeExt(Default,,X)
}
Add(Math,1951545,910,462)
{
OpType=1
Op2=1
link(onResult,7987341:doWork3,[(948,468)])
link(Op1,1599697:Var2,[])
}
Add(HubEx,7987341,944,441)
{
link(onEvent,6400917:doWork3,[(970,447)])
}
Add(Math,2324044,952,483)
{
Op2=1
link(onResult,16376611:doWork2,[(1022,489)(1022,384)])
link(Op1,7920251:Var2,[])
}
Add(Memory,15067560,1057,378)
{
Default=Integer(0)
MakeExt(Default,,Y)
}
Add(Math,8084396,987,504)
{
OpType=1
Op2=1
link(onResult,16376611:doWork3,[(1037,510)])
link(Op1,3201385:Var2,[])
}
Add(GetDataEx,14241382,427,238)
{
Angle=3
link(Data,14427750:Var3,[])
}
Add(ArrayRW,7427723,1099,553)
{
link(Array,2949624:Var3,[(1105,299)])
link(Index,13336943:Index,[(1112,544)(678,544)])
}
Add(GetDataEx,2949624,742,294)
{
link(Data,12969089:Array,[])
}
Add(FormatStr,11384990,1050,560)
{
DataCount=3
Mask="%1,%2,%3"
link(onFString,7427723:doWrite,[])
link(Str1,13768270:Var2,[])
link(Str2,11417882:Var2,[])
}
Add(Math,2952193,819,560)
{
Op2=1
Default=250
link(onResult,2512205:doCompare,[])
link(Op1,13657560:Part2,[])
AddHint(-9,38,30,13,Op2)
}
Add(MultiStrData,13845065,812,329)
{
Char=","
link(onPart1,6400917:doWork2,[])
link(onPart2,16376611:doWork1,[(1037,342)])
}
Add(HubEx,6400917,966,329)
{
link(onEvent,9781029:doValue,[])
}
Add(HubEx,16376611,1033,378)
{
link(onEvent,15067560:doValue,[])
}
Add(GetDataEx,13768270,1050,364)
{
link(Data,9781029:Value,[])
}
Add(GetDataEx,11417882,1057,413)
{
link(Data,15067560:Value,[])
}
Add(MultiStrPart,13657560,812,371)
{
Char=","
link(Str,13845065:RemaindStr,[])
}
Add(GetDataEx,2207095,812,420)
{
link(Data,13657560:Part1,[])
}
Add(If_else,2512205,875,560)
{
Type=2
Op2=Integer(30)
link(onTrue,10236209:doRandom,[])
link(onFalse,6686438:doStrCatDlm,[(921,573)(921,615)])
AddHint(-6,-19,27,13,Op2)
}
Add(GetDataEx,8072376,875,364)
{
Angle=1
link(Data,1599697:Var1,[])
}
Add(GetDataEx,7920251,952,413)
{
Angle=1
link(Data,3201385:Var1,[])
}
Add(GetDataEx,1599697,910,364)
{
Angle=1
link(Data,13768270:Var1,[])
}
Add(GetDataEx,3201385,987,413)
{
Angle=1
link(Data,11417882:Var1,[])
}
Add(StrCatDelim,6686438,973,609)
{
Delimiter=","
link(onStrCatDlm,5049951:doWork3,[(1026,615)])
link(Str1,2207095:Var1,[(979,601)(789,601)(789,425)])
}
Add(StrCat,11892796,973,560)
{
Str2=",0"
link(onStrCat,5049951:doWork2,[])
}
Add(HubEx,5049951,1022,560)
{
link(onEvent,11384990:doString,[])
}
Add(For,1304847,518,357)
{
Start=-500
End=1000
Step=50
link(onEvent,13937395:doFor,[(558,363)(558,349)])
link(onStop,13336943:doEnum,[])
}
Add(For,13937395,567,343)
{
Start=-500
End=500
Step=50
link(onEvent,4744450:doDraw,[])
}
Add(LineBreakEx,16753551,609,308)
{
Caption="bmp"
Type=2
}
Add(IndexToChanel,3352261,735,560)
{
Count=1
Point(Index)
link(onEvent1,2952193:doOperation,[])
link(Index,10210202:Count,[])
}
Add(Keyboard,8884940,245,504)
{
Key=32
link(onReadKey,2270826:doData,[])
}
Add(IndexToChanel,10537779,329,504)
{
link(onEvent2,10210202:doNext,[])
}
Add(CounterEx,10210202,735,511)
{
Max=1
}
Add(ChangeMon,2270826,287,504)
{
link(onData,10537779:doEvent,[])
}
Add(LineBreakEx,4146830,469,329)
{
Caption="bmp"
Type=2
}
Add(Img_Text,4487587,469,364)
{
X=342
Y=180
Font=[Wingdings 3,22,0,16711935,2]
Text="h"
link(Bitmap,4146830:getVar,[])
}
Add(Img_Point,4744450,609,343)
{
Color=12632256
Size=3
Point(X)
Point(Y)
link(Bitmap,16753551:getVar,[])
link(X,1304847:Position,[(622,331)(649,331)(649,402)(524,402)])
}
Add(InfoTip,14461835,224,441)
{
Info=#24:Отключаем движение точек|
Width=162
Height=130
}
Add(InfoTip,11475779,658,203)
{
Info=#24:Перебираем массив точек.|53:(позиция X, позиция Y, направление, количество шагов)|64:Если точка прошла больше 30 шагов, может измениться направление |
Width=498
Height=445
}
Осталось выдать дробовик, разбросать боеприпасы по игровому полю и начать отстреливать точки
Леонид, ваша схема на моем стареньком ноутбуке дико виснет (процессор на 100%). И вот не могу понять это или из-за содержания картинки или из-за того что вы ее переворачиваете несколько раз в секунду. Так что большая просьба не выкладывать в схемах такие картинки, а то сильно отвлекает от поставленной задачи

Редактировалось 2 раз(а), последний 2020-07-12 17:41:12
карма: 11

0
Ответов: 8921
Рейтинг: 823
#8: 2020-07-12 20:18:09 ЛС | профиль | цитата
sla8a, коллега Tad уже высказывался по этому поводу: гигагерцовые тактовые частоты и много гигабайтная память портят программистов, поэтому и возникают вопросы: "А ты точно программист?"
У меня четыре ядра, 3.5 ГГц и 8 Гб ОЗУ и диспетчер задач при 100 точках говорит "Низкий" и лишь при 200 точках переходит на "Умеренный".
Низкий.jpg
"Сытый голодного не понимает"
карма: 19

0
Ответов: 1343
Рейтинг: 31
#9: 2020-07-12 22:11:29 ЛС | профиль | цитата
главная точка никем не управляется в программе, она такая же как все из массива, её можно вырезать оттуда и отдельно читать, но суть в том что изначально присутствует только массив XY у которого постоянно обновляются координаты этих точек и больше ничего нет

Редактировалось 1 раз(а), последний 2020-07-12 22:12:47
карма: 2

0
Ответов: 2236
Рейтинг: 676
#10: 2020-07-12 22:24:10 ЛС | профиль | цитата
Rysik, и в чем проблема? Вам показали как отрисовать используя вычисления (схема Леонида) и используя элементы трансформации (моя схема). Вам нужно показать как работать с массивом?
карма: 11

0
Ответов: 1343
Рейтинг: 31
#11: 2020-07-21 22:52:55 ЛС | профиль | цитата
проблема в том, что в этой схеме нет главной точки, а управление углом поворота идёт от горячих клавиш, а на деле совсем всё по другому

есть массив точек:

131.3501953124999;98.09848327636718
351.56513671875;160.1085144042969
369.4712402343751;117.0934692382812
245.4761718749999;264.2236938476563
207.148388671875;162.0763122558594
261.3522216796876;183.705517578125
296.883544921875;233.283154296875
334.402587890625;19.06053161621094

и одна главная точка, такая же как все остальные, но не хаотично, а от управления, но всё что от неё есть, так это такие же координаты как и у остальных



264.9369140624999;238.6353637695312


Add(MainForm,2953706,21,105)
{
Width=671
Height=446
}
Add(PaintBox,16296757,231,217)
{
Width=655
Height=408
Align=5
Color=16777215
TabOrder=1
ClearBeforeDraw=0
Point(onMouseWheel)
Point(onMouseMove)
Point(onMouseDown)
Point(MouseX)
Point(MouseY)
link(onBeforeDraw,3450544:doEvent1,[])
}
Add(Img_Point,9351544,826,357)
{
Color=16711680
Size=3
Point(X)
Point(Y)
link(Bitmap,3013644:getVar,[])
link(X,7956951:Part1,[(839,345)(804,345)(804,401)(769,401)])
link(Y,7956951:Part2,[(846,345)(811,345)(811,401)(776,401)])
}
Add(Math,5147421,420,203)
{
Op2=2
Default=250
link(onResult,6669566:doWork2,[])
link(Op1,854946:Var2,[])
}
Add(Memory,9756808,483,203)
{
Default=Integer(0)
MakeExt(Default,,Y)
AddHint(1,-21,21,13,Default)
}
Add(Math,16455664,406,238)
{
OpType=1
Op2=2
Default=250
link(onResult,6669566:doWork3,[(464,244)])
link(Op1,854946:Var1,[(412,189)])
}
Add(Keyboard,6864804,322,231)
{
Key=68
link(onReadKey,1318274:doEvent,[])
}
Add(IndexToChanel,1318274,364,231)
{
link(onEvent2,16455664:doOperation,[])
}
Add(Keyboard,2734219,322,196)
{
Key=65
link(onReadKey,14052412:doEvent,[])
}
Add(IndexToChanel,14052412,364,196)
{
link(onEvent2,5147421:doOperation,[])
}
Add(Keyboard,9264453,322,154)
{
Key=87
link(onReadKey,7965526:doEvent,[])
}
Add(IndexToChanel,7965526,364,154)
{
link(onEvent2,8415989:doCalc,[])
}
Add(Hub,3450544,273,217)
{
OutCount=6
link(onEvent1,9264453:doReadKey,[(297,223)(297,160)])
link(onEvent2,2734219:doReadKey,[(305,230)(305,202)])
link(onEvent3,6864804:doReadKey,[])
link(onEvent4,7645734:doSetTransform,[(316,244)(316,363)])
link(onEvent5,7645734:doResetTransform,[(305,251)(305,370)])
}
Add(Img_UseOffset,6583126,574,203)
{
X=-350
Y=-200
link(X,8415989:Result,[])
link(Y,11955774:Result,[(594,198)(629,198)])
}
Add(Img_UseRotate,8859586,476,252)
{
Angle=0
link(Angle,14427750:Var2,[])
}
Add(Img_Point,11768602,532,364)
{
X=350
Y=200
Color=16711935
Size=5
Point(X)
Point(Y)
link(onDraw,4487587:doDraw,[])
link(Bitmap,16505516:getVar,[])
}
Add(LineBreakEx,16505516,532,329)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,2483627,231,266)
{
Caption="bmp"
Type=3
link(_Data,16296757:Bitmap,[])
}
Add(LineBreakEx,124505,448,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,2075203,406,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,3231849,364,322)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,3013644,826,308)
{
Caption="bmp"
Type=2
}
Add(Img_Line,1128388,406,357)
{
Point1=-1000
Point2=1000
LineStyle=2
link(onDraw,10826445:doDraw,[])
link(Bitmap,2075203:getVar,[])
}
Add(Img_Line,10826445,448,357)
{
Point1=-65536000
Point2=65536000
LineStyle=2
link(onDraw,10774283:doSetTransform,[])
link(Bitmap,124505:getVar,[])
}
Add(Img_Text,623198,364,357)
{
X=-6
Y=-120
Font=[MS Sans Serif,12,1,0,1]
Text="N"
link(onDraw,1128388:doDraw,[])
link(Bitmap,3231849:getVar,[])
}
Add(Img_SetTransform,7645734,322,357)
{
Point2=26215100
link(onSetTransform,623198:doDraw,[])
link(onResetTransform,10774283:doResetTransform,[])
link(Bitmap,14303955:getVar,[])
link(Transform,8859586:Transform,[(349,295)(482,295)])
}
Add(LineBreakEx,14303955,322,322)
{
Caption="bmp"
Type=2
}
Add(Img_SetTransform,10774283,490,357)
{
Point2=26215100
link(onSetTransform,9786009:doEnum,[])
link(onResetTransform,11768602:doDraw,[])
link(Bitmap,4929607:getVar,[])
link(Transform,15911165:Transform,[(517,296)(580,296)])
}
Add(LineBreakEx,4929607,490,322)
{
Caption="bmp"
Type=2
}
Add(Img_UseRotate,15911165,574,252)
{
Angle=0
link(AddTransform,6583126:Transform,[])
link(Angle,14241382:Var3,[(587,243)])
}
Add(MathParse,8415989,581,161)
{
DataCount=1
MathStr="2 * sin (%1/180*pi) + %0"
Default=-350
link(onResult,11955774:doCalc,[])
link(X1,9143755:Var2,[])
}
Add(MathParse,11955774,623,161)
{
DataCount=1
MathStr="2 * cos (%1/180*pi) + %0"
Default=-200
link(X1,9143755:Var3,[(629,149)])
}
Add(HubEx,6669566,460,203)
{
link(onEvent,9756808:doValue,[])
}
Add(GetDataEx,14427750,483,238)
{
link(Data,9756808:Value,[])
}
Add(GetDataEx,854946,420,184)
{
Angle=1
link(Data,14427750:Var1,[(471,189)(471,243)])
}
Add(GetDataEx,9143755,581,144)
{
Angle=3
link(Data,14241382:Var1,[(538,149)])
}
Add(GetDataEx,14241382,532,238)
{
Angle=3
link(Data,14427750:Var3,[])
}
Add(LineBreakEx,4146830,574,329)
{
Caption="bmp"
Type=2
}
Add(Img_Text,4487587,574,364)
{
X=342
Y=180
Font=[Wingdings 3,22,0,16711935,2]
Text="h"
link(Bitmap,4146830:getVar,[])
}
Add(Timer,9568122,189,217)
{
Interval=33
link(onTimer,16296757:doRefresh,[])
}
Add(ArrayEnum,9786009,707,357)
{
link(onItem,7956951:doSplit,[])
link(Array,16380:Array,[(713,306)(720,306)])
}
Add(MultiStrPart,7956951,763,357)
{
link(onSplit,9351544:doDraw,[])
}
Add(StrList,16380,700,210)
{
Strings=#35:131.3501953124999;98.09848327636718|33:351.56513671875;160.1085144042969|35:369.4712402343751;117.0934692382812|35:245.4761718749999;264.2236938476563|34:207.148388671875;162.0763122558594|34:261.3522216796876;183.705517578125|33:296.883544921875;233.283154296875|34:334.402587890625;19.06053161621094|
}
Add(VisualStrings,13415332,336,490)
{
@Hint=#14:та самая точка|
Lines=#35:264.9369140624999;238.6353637695312|
Width=263
AddHint(146,-53,92,13,@Hint)
}


суть в том, что исходя из координат этой единственной точки, от её направления движения(направление берётся из 2-х точек, это текущая координата точки и следующая куда точка сдвинется за промежуток времени 33мс, это и будет вектор направления движения), должен происходить поворот всего поля


как это сделать даже не предполагаю

Редактировалось 1 раз(а), последний 2020-07-21 22:53:52
карма: 2

0
Ответов: 2236
Рейтинг: 676
#12: 2020-07-21 23:15:25 ЛС | профиль | цитата
Rysik писал(а):
как это сделать даже не предполагаю
Есть одна точка и через 33мс она в другой позиции. Этого достаточно чтоб найти на какой угол нужно повернуть.
карма: 11

0
Ответов: 1343
Рейтинг: 31
#13: 2020-07-21 23:20:17 ЛС | профиль | цитата
sla8a писал(а):
Есть одна точка и через 33мс она в другой позиции. Этого достаточно чтоб найти на какой угол нужно повернуть.


понятное дело, но у меня по математике всётаки 2-3 было, и в этом направлении думать сложновато
карма: 2

0
Ответов: 2236
Рейтинг: 676
#14: 2020-07-21 23:26:17 ЛС | профиль | цитата
Rysik, да тут в интернете показаться пару минут. Чуть подкорректировать схему.
карма: 11

0
Ответов: 1343
Рейтинг: 31
#15: 2020-07-21 23:33:53 ЛС | профиль | цитата
sla8a писал(а):
Rysik, да тут в интернете показаться пару минут. Чуть подкорректировать схему.


надо хотя бы пнуть меня в этом направлении, какие формулы использовать итд, а то сам не понимаю в этом воообще
карма: 2

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)