Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
Potreboval by som s takou vecou pomomoct a to je prave vykreslovanie drahy robota v DELPHI na nejaku graficku plochu. Ide o to, ze napr. pojde rovno, tak aj ciara bude smerovat kolmo po grafickej ploche, lenze otoci sa dany objekt pod urcitym uhlom (napr 45 st) tak uz aj ta vykreslovana ciara musi ist pod tym 45st vpred a prave toto ako by sa dalo naprogramovat v DELPHI? Este na upresnenie dodam, ta ciara sa vlastne bude vykreslovat po usekoch a to bud po 1 pixeli alebo po usekoch kratkych ciar.
Tento princip je vlastne obdobny ako u 2D hier s autami, ked je pohlad zhora a auto sa pohybuje po ploche.
napr. takto by vyzeral vystup
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
kreslit mozes na componenty ktore obsahuju canvas , funkciami moveto lineto
|
|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
no to viem
Ale mne ide o to, ze ked sa ten robot otoci o dani uhol, tak aj nech tu ciaru stale vykresluje o ten uhol. A toto je dost velky problem aspon pre mna naprogramovat. Pretoze ked ten robot pojde rovno alebo sa otoci o uhol 90, 180, 270 st. tak sa vlastne bude menit len jedna suradnica (x alebo y), ale ked sa otoci o 18st. tak uz sa budu naraz menit obe suradnice (sucastne x a y). Toto je ta vec, ktoru neviem ako mam naprogramovat, urcite na to treba znalosti z matematiky - vektory a podobne, lenze tam este v skole nie sme
|
|
Registrovaný: 11.01.09 Prihlásený: 26.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Môžeš sa zatiaľ oprieť o toto ( na form si daj jeden TEdit a jeden TButton a do uses pridaj unit Math ):
Kód: var OldPosition: TPoint;
const VECTORLENGTH = 50; rad = pi/180;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin
Canvas.MoveTo( 300, 200 ); OldPosition.X := 300; OldPosition.Y := 200;
end;
procedure TForm1.Button1Click(Sender: TObject); var x, y, angle: integer;
begin
angle := StrToInt( Edit1.Text );
x := round( OldPosition.X + sin( angle * rad ) * VECTORLENGTH ); y := round( OldPosition.Y + cos( angle * rad ) * VECTORLENGTH );
Canvas.LineTo( x, y ); OldPosition.X := x; OldPosition.Y := y;
end;
Do editu píš uhol, v akom sa pohybuje robot. Konštanta VECTORLENGTH je dĺžka, o koľko sa robot pohne po plátne.
|
|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
Velka vdaka Fico , presne toto som myslel
Program si uz upravim aby mi vyhovaval na mieru a doprogramujem komunikaciu a potom Vam ukazem vysledok.
Len tak aby ste vedeli o co sa jedna, robot pojde po zemi a bude sa danym zariadenim ovladat, bud cez PC (klavesnica, joystick,..) alebo cez mobil, popripadne cez dialkovy ovladac. Kazdu sekundu (alebo aj castejsie) sa bude vysielat stav s rotacnich inkrementacnich enkoderoch (IRC) o pohybe kazdeho kolesa, nasledne sa tieto data v PC spracuvaju a pekne sa vykresli draha. Pri zatoceni sa len vyrata uhol a zas bude vykreslovat drahu danym smerom. Presnost tohoto vykreslovania, nebude moc velka, pretoze nedisponujem el. kompasom, ale dostacujuca pre mna.
Myslim nieco na tento system: http://projects.adamh.cz/robot2 , az na to, ze ja tam nemam el. kompas.
este raz velke diky Fico
|
|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
Esta raz by som sa chcel vratit k tejto teme, potreboval by som o nieco vylepsit vykreslovanie.
Pri zmene uhla otocenia by sa nenakreslila lomena ciara, ale by sa vykreslil vysek kruznice, polomer kruznice by bol nastaveny konstantne.
Ako priklad uvediem, bola by vykreslovana ciara stale rovno, pri zmene uhla o 90° by sa vykreslila 1/4 kruznice do prislusnej strany a za nou by sa standartne vykreslovala ciara.
_________________ "Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
myslis nieco taketo ?
Kód: procedure TForm1.Button1Click(Sender: TObject); var x, y, angle: integer; i,e : Integer; polomer : Integer; OldPosition: TPoint; begin OldPosition.X := 200; OldPosition.Y := 230; Canvas.MoveTo( OldPosition.X, OldPosition.Y ); OldPosition.X := 230; OldPosition.Y := 230; Canvas.LineTo( OldPosition.X, OldPosition.Y ); polomer := 40; for i:= 1 to 90 do begin
x := Round(sin(i*(pi/180))*polomer); y := Round(cos(i*(pi/180))*polomer);
Canvas.LineTo( OldPosition.X+x, OldPosition.y+y-polomer ); Sleep(10); Application.ProcessMessages; end; Canvas.LineTo( OldPosition.X+x, OldPosition.y+y-polomer-50 ); end;
|
|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
Ano, nieco na tento system. diky.
Snad sa mi to podari este prerobit na moje uceli, ak nie ozvem sa
EDIT:
Este poradil by si mi, ako sa da najjednoduchsie zmenit smer zakrivenia kruznice (myslim tym nie zprava dolava, ale opacne zlava doprava)?
_________________ "Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
skusal si vymenit sin/cos ?
|
|
Registrovaný: 20.11.09 Prihlásený: 02.11.14 Príspevky: 241 Témy: 58 | 58 Bydlisko: Myjava |
Ja som to trochu inak myslel, vykreslovat obraz v opacnom smere, ale v zrkadlovo otocenom.
Ten vlavo je povodny a ja to myslim vykreslit ako je na to na pravom obrazku:
EDIT:
OK, Uz som na to prisiel, treba zmenit iba znamienka:
Kód: x := Round(sin(i*(pi/180))*polomer); y := - Round(cos(i*(pi/180))*polomer);
Canvas.LineTo( OldPosition.X+x, OldPosition.y+y+polomer );
_________________ "Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek |
|
Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Delphi, Visual Basic | 3 | 582 | 15.10.2010 10:05 coldak | | v Delphi, Visual Basic | 3 | 1151 | 11.05.2008 12:02 p360t | | v PC zostavy | 27 | 1566 | 01.02.2008 23:56 salamoon | | v Vzdelanie, štúdium, škola | 9 | 2600 | 22.06.2012 7:47 Vlad | | [ Choď na stránku: 1, 2, 3, 4 ] v Novinky | 106 | 2786 | 30.12.2013 18:16 Spartan.Ex | | v Delphi, Visual Basic | 6 | 909 | 27.08.2011 11:54 vama | | v Monitory, televízory a projektory | 13 | 828 | 18.03.2017 23:29 marekk5111 | | [ Choď na stránku: 1 ... 23, 24, 25 ] v Novinky | 749 | 16399 | 07.04.2015 19:53 brmbo | | v Assembler, C, C++, Pascal, Java | 4 | 321 | 13.04.2013 12:14 XOLOO | | v nVidia grafické karty | 4 | 394 | 01.01.2011 9:47 marko13 | | v Assembler, C, C++, Pascal, Java | 9 | 621 | 27.02.2011 23:40 Fico | | v Grafické programy | 4 | 589 | 12.11.2009 12:29 El_locco | | v Assembler, C, C++, Pascal, Java | 16 | 1706 | 03.06.2007 22:38 juho | | v Assembler, C, C++, Pascal, Java | 11 | 835 | 14.12.2008 11:54 Blackshadow | | v Assembler, C, C++, Pascal, Java | 8 | 664 | 29.05.2010 13:48 stopa27 | | v Assembler, C, C++, Pascal, Java | 12 | 797 | 19.06.2011 17:52 ice-g |
|