Вверх ↑
Этот топик читают: Гость
Ответов: 1898
Рейтинг: 623
#16: 2020-07-21 23:36:30 ЛС | профиль | цитата
Rysik, в примерах посмотрите в папке Draw есть пример по отрисовке, там насколько помню и формула есть.
карма: 9

0
Ответов: 1253
Рейтинг: 28
#17: 2020-07-22 00:05:41 ЛС | профиль | цитата
разве что пример Player, но всёравно ничего не понятно
карма: 2

0
Ответов: 1898
Рейтинг: 623
#18: 2020-07-22 12:53:18 ЛС | профиль | цитата
Rysik, вот вам эта сложная формула atan(x1 - x2, y1 - y2) по определению угла между двумя точками:

Вот как ее использовать для определения угла между двумя точками:

Add(MainForm,2953706,623,350)
{
Width=612
Height=644
Position=1
}
Add(Img_Point,8729249,308,350)
{
Color=255
Size=5
Point(X)
Point(Y)
link(onDraw,13168843:doDraw,[])
link(Bitmap,7790025:Var2,[])
link(X,13216144:getVar,[])
link(Y,7405531:getVar,[])
}
Add(Img_Point,12437351,483,350)
{
Color=65280
Size=5
Point(X)
Point(Y)
link(onDraw,6359882:doCalc,[])
link(Bitmap,13855645:Var3,[(489,250)])
link(X,13936630:getVar,[])
link(Y,11951026:getVar,[])
}
Add(Img_Line,13168843,364,350)
{
LineStyle=2
Point(Point1)
Point(Point2)
link(onDraw,12437351:doDraw,[])
link(Bitmap,13855645:Var2,[])
link(Point1,4617187:Point,[])
link(Point2,7282636:Point,[(384,342)(426,342)])
}
Add(PaintBox,10098511,308,119)
{
Width=600
Height=600
ClearBeforeDraw=0
Point(onMouseMove)
Point(MouseX)
Point(MouseY)
link(onBeforeDraw,8729249:doDraw,[(352,125)(352,109)(282,109)(282,356)])
link(onMouseMove,13339577:doValue,[(352,132)(352,156)(303,156)(303,181)])
}
Add(GetDataEx,7790025,308,245)
{
link(Data,10098511:Bitmap,[])
}
Add(GetDataEx,13855645,364,245)
{
Angle=3
link(Data,7790025:Var3,[])
}
Add(MathParse,6359882,546,350)
{
DataCount=4
MathStr="atan (%2 - %1, %4 - %3)"
AngleMode=1
link(onResult,2953706:doCaption,[])
link(X1,938584:getVar,[])
link(X2,5915321:getVar,[])
link(X3,5082850:getVar,[])
link(X4,7532447:getVar,[])
}
Add(Memory,15819785,560,112)
{
Default=Integer(300)
AddHint(-6,-18,33,13,Default)
}
Add(Memory,10636918,616,112)
{
Default=Integer(300)
AddHint(-4,-18,33,13,Default)
}
Add(LineBreakEx,11109437,560,161)
{
Caption="oldX"
Type=3
link(_Data,15819785:Value,[])
}
Add(LineBreakEx,2312529,616,161)
{
Caption="oldY"
Type=3
link(_Data,10636918:Value,[])
}
Add(Memory,13339577,315,175)
{
Point(Data)
link(onData,12580057:doValue,[])
link(Data,10098511:MouseX,[])
}
Add(Memory,12580057,371,175)
{
Point(Data)
link(onData,10098511:doRefresh,[(429,181)(429,239)(296,239)(296,125)])
link(Data,10098511:MouseY,[(377,163)(328,163)])
}
Add(LineBreakEx,8119257,315,217)
{
Caption="newX"
Type=3
link(_Data,13339577:Value,[])
}
Add(LineBreakEx,5014989,371,217)
{
Caption=" newY"
Type=3
link(_Data,12580057:Value,[])
}
Add(LineBreakEx,938584,546,280)
{
Caption="oldX"
Type=2
}
Add(LineBreakEx,5082850,560,308)
{
Caption="oldY"
Type=2
}
Add(LineBreakEx,5915321,553,294)
{
Caption="newX"
Type=2
}
Add(LineBreakEx,7532447,567,322)
{
Caption=" newY"
Type=2
}
Add(LineBreakEx,13216144,315,294)
{
Caption="oldX"
Type=2
}
Add(LineBreakEx,7405531,322,308)
{
Caption="oldY"
Type=2
}
Add(LineBreakEx,13936630,490,308)
{
Caption="newX"
Type=2
}
Add(LineBreakEx,11951026,497,322)
{
Caption=" newY"
Type=2
}
Add(PointXY,4617187,371,301)
{
link(X,881996:getVar,[])
link(Y,12964497:getVar,[])
}
Add(PointXY,7282636,420,301)
{
link(X,4992449:getVar,[])
link(Y,12054997:getVar,[])
}
Add(LineBreakEx,881996,371,259)
{
Caption="oldX"
Type=2
}
Add(LineBreakEx,12964497,378,273)
{
Caption="oldY"
Type=2
}
Add(LineBreakEx,4992449,420,259)
{
Caption="newX"
Type=2
}
Add(LineBreakEx,12054997,427,273)
{
Caption=" newY"
Type=2
}
Обратите внимание что у MathParse в свойстве AngleMode = Градусы (по умолчанию Радианы).
карма: 9

0
Ответов: 8548
Рейтинг: 790
#19: 2020-07-22 14:14:01 ЛС | профиль | цитата
Rysik, ну разжевали до каши, а в горло не лезет
https://forum.hiasm.com/getfile/39089
карма: 18

0
Ответов: 1898
Рейтинг: 623
#20: 2020-07-22 15:38:55 ЛС | профиль | цитата
Леонид, не хочу вас огорчать, но это еще не совсем то что нужно Rysik-у. Точка должна быть постоянно в центре, так что дожевывайте не проглотит так.
карма: 9

0
Ответов: 1253
Рейтинг: 28
#21: 2020-07-22 21:01:46 ЛС | профиль | цитата
что то как то оно работает, дёргается, после определённых градусов на 180 переворачивается)), ничего так и не понятно)
карма: 2

0
Ответов: 1898
Рейтинг: 623
#22: 2020-07-22 22:46:44 ЛС | профиль | цитата
Rysik, кому адресованны ваши жалобы мне или Леониду?
карма: 9

0
Ответов: 1253
Рейтинг: 28
#23: 2020-07-22 23:17:27 ЛС | профиль | цитата

Add(PaintBox,16296757,133,1092)
{
Width=700
Height=400
Align=5
Color=16777215
TabOrder=1
ClearBeforeDraw=0
Point(onMouseWheel)
Point(onMouseMove)
Point(onMouseDown)
Point(MouseX)
Point(MouseY)
link(onBeforeDraw,3450544:doEvent1,[(181,1098)(181,1070)])
}
Add(Img_Point,9351544,728,1232)
{
Color=16711680
Size=3
Point(X)
Point(Y)
link(Bitmap,3013644:getVar,[])
link(X,7956951:Part1,[(741,1220)(706,1220)(706,1276)(671,1276)])
link(Y,7956951:Part2,[(748,1220)(713,1220)(713,1276)(678,1276)])
}
Add(Hub,3450544,196,1064)
{
link(onEvent1,10774283:doSetTransform,[(293,1070)(293,1238)])
link(onEvent2,10774283:doResetTransform,[(288,1077)(288,1245)])
}
Add(Img_Point,11768602,434,1239)
{
X=350
Y=200
Color=16711935
Size=5
Point(X)
Point(Y)
link(onDraw,4487587:doDraw,[])
link(Bitmap,16505516:getVar,[])
}
Add(LineBreakEx,16505516,434,1204)
{
Caption="bmp"
Type=2
}
Add(LineBreakEx,2483627,133,1141)
{
Caption="bmp"
Type=3
link(_Data,16296757:Bitmap,[])
}
Add(LineBreakEx,3013644,728,1183)
{
Caption="bmp"
Type=2
}
Add(Img_SetTransform,10774283,392,1232)
{
Point2=26215100
link(onSetTransform,9786009:doEnum,[])
link(Bitmap,6699024:Var2,[])
link(Transform,15911165:Transform,[(419,1171)(482,1171)])
}
Add(LineBreakEx,4929607,392,1197)
{
Caption="bmp"
Type=2
}
Add(Img_UseRotate,15911165,476,1127)
{
Angle=0
link(AddTransform,6583126:Transform,[])
link(Angle,16030386:Value,[(489,1115)(447,1115)(447,1458)(405,1458)])
}
Add(LineBreakEx,4146830,476,1204)
{
Caption="bmp"
Type=2
}
Add(Img_Text,4487587,476,1239)
{
X=342
Y=180
Font=[Wingdings 3,22,0,16711935,2]
Text="h"
link(Bitmap,4146830:getVar,[])
}
Add(Timer,9568122,91,1092)
{
Interval=33
link(onTimer,16296757:doRefresh,[])
}
Add(ArrayEnum,9786009,609,1232)
{
link(onItem,7956951:doSplit,[])
link(onEndEnum,3940716:doDraw,[(653,1245)(653,1333)(289,1333)(289,1420)])
}
Add(MultiStrPart,7956951,665,1232)
{
link(onSplit,9351544:doDraw,[])
}
Add(Img_UseOffset,6583126,476,1071)
{
X=-200
Y=-300
}
Add(Img_Point,3940716,301,1414)
{
Color=255
Size=6
Point(X)
Point(Y)
link(onDraw,6491488:doCalc,[])
link(Bitmap,6699024:Var1,[(307,1216)])
link(X,14411942:Var2,[])
link(Y,12273317:Var2,[])
}
Add(Memory,11644010,455,1414)
{
Point(Data)
link(onData,8958529:doValue,[])
link(Data,12653839:Var3,[(461,1391)])
}
Add(Memory,8958529,497,1414)
{
Point(Data)
link(Data,6823860:Var3,[(503,1384)])
}
Add(MathParse,6491488,350,1414)
{
DataCount=4
MathStr="atan((%3 - %1),(%4 - %2))"
AngleMode=1
link(onResult,16030386:doValue,[])
link(X1,12653839:Var2,[])
link(X2,6823860:Var2,[])
link(X3,11644010:Value,[(370,1398)(447,1398)(447,1454)(461,1454)])
link(X4,8958529:Value,[(377,1405)(440,1405)(440,1461)(503,1461)])
}
Add(Memory,16030386,399,1414)
{
link(onData,11644010:doValue,[])
}
Add(GetDataEx,12653839,350,1386)
{
Angle=3
link(Data,14411942:Var3,[])
}
Add(GetDataEx,6823860,357,1379)
{
Angle=3
link(Data,12273317:Var3,[])
}
Add(GetDataEx,12273317,315,1379)
{
Angle=3
}
Add(GetDataEx,14411942,308,1386)
{
Angle=3
}
Add(GetDataEx,6699024,392,1211)
{
link(Data,4929607:getVar,[])
}



вот сюда подаю координаты точки своей главной там где MatchParse, а вверху на массив подаю координаты всех точек остальных, и всё дергается при повороте, главное работает немного), но после определённого градуса что то идёт не так и оно переворачивается на 180...

может быть дело в не правильных смещениях градусов, обратив внимание что формула выдаёт от 0 до 180 и после идёт опять от -0 до -180 грубо говоря, а вроде как трансформация работает в режиме от 0 до 360,
карма: 2

0
Ответов: 8548
Рейтинг: 790
#24: 2020-07-22 23:47:23 ЛС | профиль | цитата
sla8a писал(а):
Точка должна быть постоянно в центре

В центре, так в центре Дрон не стал отрисовывать, поставил буковку "А". Карта большая, аж 1.5 Мб
https://forum.hiasm.com/getfile/39090
карма: 18

0
Ответов: 1253
Рейтинг: 28
#25: 2020-07-23 15:50:23 ЛС | профиль | цитата
что то не ладное с формулой видимо, иду в любые стороны и градус поворота от -90 до +90, бред какой то..., должно быть от 0 до 360

как и писал выше постом, сделать удалось но результат как у Леонида, одно и тоже, карта произвольно переворачивается на 180 градусов и как будто я уже по карте иду не вверх а вниз

--- Добавлено в 2020-07-23 15:52:52

Бегающие точки 3, схема, так же и работает не правильно, до 80 с чем то доходит и происходит реверс карты на 180 градусов, ладно бы доходило до 180 и реверс, но нет, где ошибка?

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

0
Ответов: 8548
Рейтинг: 790
#26: 2020-07-23 17:10:38 ЛС | профиль | цитата
Rysik, схема №3 крутится без сбоев, может мощности компьютера не хватает, поставьте на таймере 100 мс или 200.
карма: 18

0
Ответов: 1253
Рейтинг: 28
#27: 2020-07-23 19:01:27 ЛС | профиль | цитата
Она при достижении порога в 80 с чем то градусов начинает в минус работать и при этом карта переворачивается

Забыл сказать, всё тестируется на FPC 64, а по мощности FX 6300 в разгоне до 4.6
карма: 2

0
Ответов: 8548
Рейтинг: 790
#28: 2020-07-23 20:15:05 ЛС | профиль | цитата
Rysik, и на штатном FPC и на Delphi нормально, правда FPC ощутимо дольше компилирует. FPC 64 у меня нет.
9мин.jpg
карма: 18

0
Ответов: 1253
Рейтинг: 28
#29: 2020-07-24 12:02:43 ЛС | профиль | цитата
32 все работает нормально, а 64 не правильно, видимо опять эти asm вставки (
карма: 2

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