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 (10.25 KiB) Zobrazeno 836 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