Programový problém s vykreslením funkcí

HackForum

Programový problém s vykreslením funkcí#
Ahojte mám takový problém -> vytvářím matematické studio. Už to něco málo umí, ale byl bych rád, kdyby to zvládlo také vykreslování lineárních funkcí. Zatím však netuším pomocí jakýho algoritmu to vykreslit. K použití jsou 2 proměnné-> x, b, takže funkce může vypadat třeba Y = 3x + 2. Zkoušel jsem mnoho způsobů, ale vždy to vykreslilo nějakou špatnou funkci. Metoda pro vykreslení přímky fce je e.DrawLine(pero, PrvníBodX, PrvníBodY, DruhýBodX, DruhýBodY). Neznáte nějaký vhodný algoritmus jehož splněním by se daly dosadit správná čísla do metody a tím úspěšně vykreslit přímku značící funkci? Jinak testovací verze by měla vypadat takto [link]
(odpovědět)
Amo | E-mail | ICQ 333-327-6529.12.2006 17:53
re: Programový problém s vykreslením funkcí#
grafom linearnej funkcie je priamka ze..
tak v com je problem.
budes mat povezdme x ovu suradnicu od 0 do 10 takze...
vypocitas zaciatocny bod pre x = 0 a potom pre x=10 a vykreslis priamku(v tomto pripade usecku) lol nechapem co ti tam nejde. algoritmus:

fukcia vyzera takto y=3x+2;
x=0;
DrawLine(pero,x,((3*x)+2),x+10,((3*(x+10)+2
));

(odpovědět)
j0e | 91.127.4.*9.12.2006 22:35
re: Programový problém s vykreslením funkcí#
povezdme x ovu suradnicu od 0 ->x ovu os som chcel povedat

(odpovědět)
j0e | 91.127.4.*9.12.2006 22:36
re: Programový problém s vykreslením funkcí#
no což to jo, ale když ti protíná osu, tak jak to udělat taky na tý druhý straně(záporný y)
(odpovědět)
Amo | E-mail | ICQ 333-327-6529.12.2006 22:46
re: Programový problém s vykreslením funkcí#
nefaká to... Ale jinak díky za pokus. Jinak ten graf má střed v bodech X = 425 a Y = 425. zkus to nějak zkombinovat
(odpovědět)
Amo | E-mail | ICQ 333-327-6529.12.2006 22:54
re: Programový problém s vykreslením funkcí#
twole...
takže celý graf má 850 bodů? (hezké celé číslo...).
A co nějaké měřítko? Chceš to zobrazovat 1:1?
y=Bx+A
DrawLine(pen, 0, A, 850, B*850+A);

Jinak pro čmárání libovolné funkce (bod po bodu)
Uvažuj funkce(x) (jedno, jestli kvadratická, lineární, goniometrická...), opět 1:1, obecně:
minulýbod=funkce(0)
for X=1 to 850;
DrawLine (pen, X-1, funkce(X-1), X, funkce (X) );
next X;
Mělo by to fungovat.
(odpovědět)
guma | 195.113.79.10/10.0.10.*10.12.2006 15:56
re: Programový problém s vykreslením funkcí#
p.s. v uvedeném programu pár věcí chybí, nezapomeň je doplnit. Testování rozsahu (aby ti čára nevyjela z canvasu!), někdo by ti pak mohl přes takové chyby zkusit matematické studio exploitnout :o)
(odpovědět)
guma | 195.113.79.10/10.0.10.*10.12.2006 16:16
re: Programový problém s vykreslením funkcí#
e, nějak jsem psal rychleji než myslel, tedy buď vynechej definici minulýbod, nebo místo finkce(X-1) použij minulýbod a potom po kreslení před koncem cyklu minulýbod=funkce(X)
(odpovědět)
guma | 195.113.79.10/10.0.10.*10.12.2006 17:47
re: Programový problém s vykreslením funkcí#
Jak by mi to mohl někdo exploitnout? Jen díky tomu, že mi čára přesáhne form
(odpovědět)
Amo | E-mail | ICQ 333-327-65210.12.2006 18:42
re: Programový problém s vykreslením funkcí#
No byl tonapůl fór, ale o tom neošetřené chyby v programech jsou. Ta čára se prostě někam nacpe - někdy dělá nějakou kontrolu přímo volaná služba, ale to pak musíš hodně dobře znát překladač, než na to začneš spoléhat. Extrémní případ, kdyby někdo zadal takovou funkci, aby se ti část čáry hodila na zásobník a při návratu z kreslicí funkce program odskočil na nějaký škodlivý kód, máš exploit jak z učebnice.
O tom to je, ošetřovat všechny mezní stavy. Třeba tak, že si zjistíš maximum a minimum funkce v zobrazovaném intervalu a změníš měřítko vykreslování tak, aby se celá čára vešla.
(odpovědět)
guma | 195.113.79.10/10.0.10.*10.12.2006 19:18
re: Programový problém s vykreslením funkcí#
v akom jazyku to robis?
ak je to C,C++ >WINAPI|SDL tak posli zdrojak mozem sa na to skusit pozret
(odpovědět)
j0e | 91.127.103.*10.12.2006 22:40
re: Programový problém s vykreslením funkcí#
Kua su blbej.. a pak že práce šlechtí, už z ní magořím.. zapomněl jsme posun os, takže žnovu,lépe, radostněji:
for X=-424 to +425;
DrawLine (pen, (X+424), funkce(X-1), (X+425), funkce (X) );
next X;

(odpovědět)
guma | 195.113.79.10/10.0.10.*11.12.2006 7:17
re: Programový problém s vykreslením funkcí#
Dělám to v C#..a nevím co má znamenat to "funkce(x-1)" to je nějaká zvláštní metoda?
(odpovědět)
Amo | E-mail | ICQ 333-327-65211.12.2006 11:22
re: Programový problém s vykreslením funkcí#
jaká zvláštní metoda? funkce je funkce, kterou chceš kreslit, ne?
Dejme tomu, že funkce(X) je (jako u tvé lineární rovnice) a*x+b. a a b jsou konstanty, x je proměnná nezávislá, a výsledek funkce(x), kde vstupem je x (proměnná nezávislá) je proměnná závislá (y). Napsal jsem to schválně tak obecně, aby se za funkci "funkce(x)" dala schovat jakákoliv funkce, nejen lineární.
Pokud děláš v C (Cpp), tak asi víš, že si můžeš funkci nadefinovat sám, třeba nějak jako
double funkce(x) double x; {return 3*x+4;} - pochopitelně předpokládám, že si budeš chtít "konstanty" a a b měnit, tak je tak taky nadefinuješ - double linearni(x, a, b) double x; double a; double b; {return a*x+b;} a pak bude funkce (x) volat funkci linearni() s příslušnými parametry...
je to jednoduché...
(odpovědět)
guma | 195.113.79.10/10.0.10.*11.12.2006 13:16
re: Programový problém s vykreslením funkcí#
:) jj
(odpovědět)
......... | 80.227.0.153/82.100.62.*11.12.2006 14:53
re: Programový problém s vykreslením funkcí#
to s tou metodou je fakt (= jinak dělám to v C#
(odpovědět)
Amo | E-mail | ICQ 333-327-65211.12.2006 19:09
re: Programový problém s vykreslením funkcí#
jo to dělá to mrňavý zelený písmo ... já C# viděl jako C++
(odpovědět)
guma | 195.113.79.10/10.0.10.*11.12.2006 19:33
re: Programový problém s vykreslením funkcí#
Stane se ((=
(odpovědět)
Amo | E-mail | ICQ 333-327-65212.12.2006 11:00

Zpět
 
 
 

 
BBCode