Форум программистов, компьютерный форум, киберфорум
Hretgir
Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

Движок генератора карт трассировок для алгоритма вместо свёрточных сетей.

Запись от Hretgir размещена 16.09.2022 в 21:48

Считал изначально, что свёрточные сети - медленный алгоритм. Почему...ну потому что были наработки алгоритмов. Каких? Ну раз в темах затирают - напишу здесь:
1) перевод игры в шахматы из двумерного пространства в одномерное - вставка через 8 клеток доски (через линию) 7 клеток технологического пространства,
2) алгоритм (способ) генерации пути инструмента ЧПУ, хотя по сути генерация контура с учётом размеров инструмента (ну вот образованные люди решили что эта задача не тривиальная, хотя на деле тривиальная - я её решил всего за 15 минут, правда смеялся два часа над решением людей считающих себя компетентными). И по многим другим причинам - я считаю что нужно всегда искать варианты того, как можно сделать лучше то или иное, в том числе и поиск лучших способов и алгоритмов.

В общем это движок. Он генерирует карты и нужен только на случай смены формата размера изображения, после того как он отгенерирует карты- до изменения формата размера он будет не нужен. Работает до 45 градусов.
Далее будет доделано:
после 45 указатели меняются местами на игрик и икс, а после 90 карты зеркалятся и получается трассировка для других углов. Ну и далее останется работа с простой нейросетью. У меня правда будет несколько иначе - нейросистема. Но назначение - то же самое.
Вот код, в поле ввода вводится угол и отображается последовательность, чтобы увидеть трассировку - нужно в строке 120 раскомментировать содержимое комментария, заменив им текст кода.
В каждой ячейке будут указаны координаты предыдущей, а единица будет означать безусловное начало следующей трассы на карте.
И да -код случайно может только не работать, случайно работающий код мне пока не встречался, но это может потому что я не программист.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls, Math;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
     type
  tracerRec = record
  ix:integer;
  yg:integer;
  bool:boolean;
end;
  var
    TtracerRec:tracerRec;
    Tracersloi: array of array of array of tracerRec;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
    procedure Step1;
  var
    p:pointer;
    y,step,stepF,s,x, sl, fi1, fi, ri1, ri, BasiY, MyCount:integer;
    px,py:^integer;
     FcountPix, countPix, FcountPix1, CaTanDegP:integer;
    CaTanDeg,TanDeg, deg:Extended;
    label l1,l2;
    begin
 
      deg:= StrToInt(Edit1.Text);
      step:=0;
      for s:=1 to  1 do begin
         TanDeg := Tan(DegToRad(deg));
         if TanDeg = 0 then begin
           CaTanDeg:=28;
           CaTanDegP:=Trunc(CaTanDeg);
           px:=@x;
           py:=@y;
           FcountPix:=0;
           FcountPix1:=0;
           end
         else begin
         CaTanDeg:= 1/TanDeg;
 
         if CaTanDeg>=TanDeg then begin
           px:=@x;
           py:=@y;
          CaTanDegP:=Trunc(CaTanDeg);
          if CaTanDegP>28 then CaTanDegP:=27;
           end
         else begin
           px:=@y;
           py:=@x;
           CaTanDegP:=Trunc(CaTanDeg);
           if CaTanDegP>28 then CaTanDegP:=27;
            end;
                  end;
         if CaTanDegP=0 then begin
           fi:=0;
           FcountPix:=0;
           FcountPix1:=0;
           end else begin
            fi:=Trunc(28 div CaTanDegP);
            FcountPix:=28-step*CaTanDegP;
            FcountPix1:=28-fi*CaTanDegP;
 
              end;
 
            stepF:=fi;
            fi1:= 27+fi;
            BasiY:=0;
            countPix:=0;
            repeat
            ri:=0;
            x:=27;
            y:=BasiY;
            step:=1;
            TtracerRec.bool:=true;
            p:=@l1;
            if BasiY>27 then  begin
            step:= BasiY-27+1;
            x:=27-(step-1)*CaTanDegP;
            y:=27;
            ri:=0;
            end;
            repeat
            FcountPix:=28-(step*CaTanDegP);
            ri1:=BasiY-fi;
            if (FcountPix1>=1) then begin
            stepF:=fi;
            end;
 
            if ri1<0 then begin
            ri:= ri1*CaTanDegP+1;
            end;
            repeat
            StringGrid1.Cells[1+px^,1+py^]:= IntToStr(countPix);//StringGrid1.Cells[1+px^,1+py^]:= IntToStr(TtracerRec.ix)+','+IntToStr(TtracerRec.yg) +','+BoolToStr(TtracerRec.bool, '1', '0');
            TtracerRec.ix:=x;
            dec(x);
            inc(countPix);
            asm
            jmp p
            end;
            l1:
            TtracerRec.bool:=false;
            TtracerRec.yg:=y;
            p:=@l2;
            l2:
            until FcountPix > x;
            TtracerRec.yg:=y;
            dec(y);
            inc(step);
            until ((28-fi*CaTanDegP-ri)>x);
           if (FcountPix1>0) and (y>=0)then begin
           TtracerRec.ix:=x;
           TtracerRec.yg:=y;
           repeat
           StringGrid1.Cells[1+px^,1+py^]:= IntToStr(countPix);
           dec(x);
           inc(countPix);
           TtracerRec.ix:=x;
           until 0 > x;
      end;
          if x = -1 then TtracerRec.ix:=0;
            inc(BasiY);
            until BasiY=fi1;
         if (FcountPix1>0) and (y>=0)then begin
         x:=FcountPix1-1;
         y:=27;
         TtracerRec.ix:=x;
         TtracerRec.yg:=y;
         repeat
         StringGrid1.Cells[1+px^,1+py^]:= IntToStr(countPix);
         dec(x);
         inc(countPix);
         TtracerRec.ix:=x;
         until 0 > x;
    end;
         end;
      end;
    begin
 Step1;
end;
 
end.

Не по теме:

По предыдущей записи тоже есть развитие, но то предмет больше на случай апокалипсиса, чем для какого-то бизнеса, ну типа как поднять хозяйство будучи лишённым благ цивилизации (станки, энергетика). Бизнесу такие решения как то - не конкуренты скорее всего, и делаются чисто с "оглядкой" на варианты будущего и просто из альтруизма. Никто не знает что ждёт людей в будущем, возможно кому-то и пригодится генератор вращательного движения без станка, ну правда наличие магнита необходимо, и видимо надо будет кактать медную проволоку как-то...в общем не суть, просто наработал и всё, а надо или нет такой движок - турбину, потом посмотрю изготовлю сам, просто из интереса.

Размещено в Без категории
Показов 1031 Комментарии 1
Всего комментариев 1
Комментарии
  1. Старый комментарий
    И да - код может и не в лучшем виде - но и я не программист, и не могу заниматься по многу в сутки - у меня просто нет на это времени.
    Но для алгоритма замены свёрточных нейросетей я искал давно решение, так как мне изначально было ясно что на компьютере их эмуляция будет очень медленной.
    Запись от Hretgir размещена 19.09.2022 в 22:11 Hretgir вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru