Stránka 1 z 1

Spojení několika bodů čarou - Small Basic

Napsal: 22 kvě 2012 17:28
od PetrJan
Potřebuji nareslit zahnutou čáru... Mohl by mi někdo poradit, jak spojit ty body čarou? Díky

Re: Spojení několika bodů čarou

Napsal: 22 kvě 2012 17:42
od faraon
Musíš spočítat jednotlivé body, nebo nepříliš vzdálené body na křivce, a sousední dvojice spojit čarou. Ukázka přímo z příručky: GraphicsWindow.DrawLine(prevX, prevY, x, y)

Re: Spojení několika bodů čarou

Napsal: 22 kvě 2012 18:43
od PetrJan
Díky, tak už mi to kreslí parabolu... Ale jak odeberu tu první přímou čáru?

Kód: Vybrat vše

  x[1]=-10
  x[2]=-9
  x[3]=-8
  x[4]=-7
  x[5]=-6
  x[6]=-5
  x[7]=-4
  x[8]=-3
  x[9]=-3
  x[10]=-1
  x[11]=0
  x[12]=1
  x[13]=2
  x[14]=3
  x[15]=4
  x[16]=5
  x[17]=6
  x[18]=7
  x[19]=8
  x[20]=9
  x[21]=10
  For i = 1 To 21
    y[i] = x[i]*x[i]
  EndFor

For i = 1 To 21
  GraphicsWindow.DrawLine(((x[i]+52)*5), (y[i]*5), ((prewX+52)*5), (prewY*5))
    prewX = x[i]
    prewY = y[i]
EndFor

Díky

Re: Spojení několika bodů čarou

Napsal: 22 kvě 2012 19:18
od CZechBoY
DrawCurve?

v čem to programuješ? kreslíš? maluješ? řežeš?

Re: Spojení několika bodů čarou

Napsal: 22 kvě 2012 19:20
od PetrJan
Small Basic...

Re: Spojení několika bodů čarou - Small Basic

Napsal: 22 kvě 2012 19:38
od faraon
Takže už jsi přišel na to jak udělat zvětšení a posunutí ;-)

Já bych zkusil ještě trochu jiné řešení:

Kód: Vybrat vše

meritkoX = 30
meritkoY = 3

FOR i = 1 TO 20
    LINE (x(i)*meritkoX+320, 400-y(i)*meritkoY) - (x(i+1)*meritkoX+320, 400-y(i+1)*meritkoY)
NEXT i


Je to v QBasicu, takže tu mám velikost plochy pouze 640*480, a čemu odpovídají příkazy LINE a NEXT si asi domyslíš, stejně jako to, proč tahle smyčka počítá jen do 20... Zvýraznil jsem ti ty body na křivce:

PetrJan.png
PetrJan.png (10.25 KiB) Zobrazeno 852 x


Hádám že ta první čára vychází z levého horního rohu, tedy souřadnic 0,0. Zapomněl jsi do proměnných prevX a prevY vložit nějakou hodnotu, takže jsou v nich zatím nuly. Kdyby to byl jiný jazyk, třeba C, byl by jejich obsah náhodný, podle toho co na místě kde se v paměti nacházejí bylo při jejím minulém použití!
Mohl bys jim před začátkem smyčky přiřadit hodnoty x(1) a y(1), a smyčku počítat až od 2.

Re: Spojení několika bodů čarou - Small Basic

Napsal: 22 kvě 2012 19:53
od PetrJan
Jo, na to jsem již přišel...
mám přepsané to Vaše do SB, ale ve SB to začíná na souřadnicích [0;0], takže u mě, když to mám posunuté [260;0] a poté až jede na další souřadnice..
dále mám parabolu vzhůru nohama :( vrchol má nahoře...
to je jedno, s dovolením použiji Vaše ření

dále mám dotaz, kam dát osový kříř

Díky moc

Re: Spojení několika bodů čarou - Small Basic

Napsal: 22 kvě 2012 19:55
od domitea
Vypočítat souřadnice středu......

Re: Spojení několika bodů čarou - Small Basic  Vyřešeno

Napsal: 22 kvě 2012 20:01
od faraon
To obrácení vzhůru nohama zařídí právě to 400-y(i), tím pádem mám i osu x na souřadnicích (x,400).
Osa y ti stejným způsobem vyjde přesně tam, kam sis posunul nulu na ploše, takže (260,y).

Re: Spojení několika bodů čarou - Small Basic

Napsal: 22 kvě 2012 20:19
od PetrJan
Jo, díky moc... Použil jsem Vaši metodu a hotovo.

Kód: Vybrat vše

TextWindow.WriteLine("Zadej číslo funkce, které graf chceš zobrazit:")
TextWindow.WriteLine("1 - y = x^2")
TextWindow.WriteLine("2 - y = x+2")
Znovu:
operace = TextWindow.ReadNumber()

If operace = 1 Then
  x[1]=-10
  x[2]=-9
  x[3]=-8
  x[4]=-7
  x[5]=-6
  x[6]=-5
  x[7]=-4
  x[8]=-3
  x[9]=-3
  x[10]=-1
  x[11]=0
  x[12]=1
  x[13]=2
  x[14]=3
  x[15]=4
  x[16]=5
  x[17]=6
  x[18]=7
  x[19]=8
  x[20]=9
  x[21]=10 
  For i = 1 To 21
    y[i] = x[i]*x[i]
  EndFor

FOR i = 1 TO 20
  GraphicsWindow.DrawLine(x[i]*3+260, 300-y[i]*3, x[i+1]*3+260, 300-y[i+1]*3)
EndFor
  GraphicsWindow.DrawLine(260, 10, 260, 510)
  GraphicsWindow.DrawLine(10, 300, 510, 300)

ElseIf operace = 2 Then
  GraphicsWindow.DrawLine(260, 10, 260, 510)
  GraphicsWindow.DrawLine(10, 300, 510, 300)
  x[1]=-10
  x[2]=-9
  x[3]=-8
  x[4]=-7
  x[5]=-6
  x[6]=-5
  x[7]=-4
  x[8]=-3
  x[9]=-3
  x[10]=-1
  x[11]=0
  x[12]=1
  x[13]=2
  x[14]=3
  x[15]=4
  x[16]=5
  x[17]=6
  x[18]=7
  x[19]=8
  x[20]=9
  x[21]=10 
  For i = 1 To 21
    y[i] = x[i]+2
  EndFor
 
FOR i = 1 TO 20
  GraphicsWindow.DrawLine(x[i]*15+200, 300-y[i]*15, x[i+1]*15+200, 300-y[i+1]*15)
EndFor

 
 Else
   TextWindow.WriteLine("Špatně, zadej 1 nebo 2")
   Goto Znovu
EndIf


Ještě jednou díky moc