Portál AbcLinuxu, 27. dubna 2024 01:34


Dotaz: Graf funkce v Gnuplotu

28.10.2005 13:04 Dag | skóre: 25 | blog: bzuk
Graf funkce v Gnuplotu
Přečteno: 335×
Odpovědět | Admin
Mám problém, jak v Gnuplotu (mám verzi 3.7) nakreslit graf funkce nebo křivky zadané dvěma nebo více vzorci na různých intervalech. Například u epicykloidy (zadané parametricky) jsem potřebovala nakreslit do obrázku zcela konkrétní úsečku, ale zvládla jsem jenom polopřímku.
Nepodařilo se mi k tomu nic vyhledat. Za případnou radu budu velmi vděčná.
Helena Říhová
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.10.2005 15:02 alex
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Odpovědět | | Sbalit | Link | Blokovat | Admin
x(t)=(a+b)*cos(t)-b*cos((a/b+1)*t)
y(t)=(a+b)*sin(t)-b*sin((a/b+1)*t)
a=8.0
b=3.0
set parametric
set samples 300
plot [t=0:20] x(t),y(t)
Pomoci
set parametric
nastavite vykreslovani funkce zadane dvema vzorcema,
[t=0:20]
udava interval na kterem funkci zkoumate.
set samples 300
je tam jenom proto, aby graf byl hladky, je to pocet usecek ze kterych se cela krivka sklada.
28.10.2005 15:27 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Mockrát děkuji za odpověď, ale asi jsem se špatně zeptala. To, co jste mi napsal, znám a použila jsem. Jenže potřebuji mít v jednom obrázku epicykloidu (spec. zkrácenou epicykloidu) kutálející se kružnici a bod, který zkrácenou epicykloidu vytváří. To všechno v obrázku mám, ale ještě jsem chtěla výše zmíněný bod spojit se středem kutálející se kružnice úsečkou a na to bych potřebovala jiný interval parametru t pro úsečku a jiný pro ostatní. A to nevím, jak zařídit (lze-li to vůbec). V TEXovém výstupu to umím upravit ve zdroji, ale jen pro některé speciální polohy úsečky.
Helena Ř.
28.10.2005 16:07 alex
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Ale co vam prekazi spocitat souradnice koncu usecky a nakreslit usecku dodatecne pomoci set arrow? Napriklad, takhle muzeme spojit dva body na epicykloide:
x(t)=(a+b)*cos(t)-b*cos((a/b+1)*t)
y(t)=(a+b)*sin(t)-b*sin((a/b+1)*t)
a=8.0
b=1.0
set size square
set parametric
set samples 100
unset border
unset xtics
unset ytics
bod1x=x(1)
bod1y=y(1)
bod2x=x(2)
bod2y=y(2)
set arrow from bod1x,bod1y to bod2x,bod2y nohead
plot [t=0:3] [-10:10] [-10:10] x(t),y(t) title "epicykloida"
28.10.2005 16:29 alex
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Potrebujete snad neco takoveho?

x0(t)=a*cos(t)
y0(t)=a*sin(t)
x1(t)=(a+b)*cos(t)
y1(t)=(a+b)*sin(t)
x2(t)=x1(t)-b*cos((a/b+1)*t)
y2(t)=y1(t)-b*sin((a/b+1)*t)
a=8.0
b=4.0
set size square
set parametric
set samples 100
unset border
unset xtics
unset ytics
t1=0.0  
t2=1.0
set arrow from 0,0 to x1(t2),y1(t2) nohead
set arrow from x1(t2),y1(t2) to x2(t2),y2(t2) nohead
plot [t=t1:t2] [-a-3*b:a+3*b] [-a-3*b:a+3*b] x2(t),y2(t) title "epicykloida", \
     x0((t-t1)/(t2-t1)*7),y0((t-t1)/(t2-t1)*7) title "kruznice1", \
     x1(t2)+b*cos((t-t1)/(t2-t1)*7),y1(t2)+b*sin((t-t1)/(t2-t1)*7) title "kruznice2"
28.10.2005 17:11 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Díky moc, příkaz set arrow můj stávající problém vyřešil. Z nápovědy mně to nedošlo -- moje chyba.
Problémem zůstává, jak nakreslit funkci typu např. f(x) = x**2 pro x z intervalu (-5;2), f(x) = 2*x+8 pro x
z intervalu <2;7) (tedy jedna funkce).
Něco mne napadlo, ale Gnuplot to odmítl.
Helena Ř.
28.10.2005 17:26 alex
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
Ternary operator je vas pritel.
f(x)= x>-5 && x<2 ? x**2 : x>2 && x<7 ? 2*x+8 : 1/0
plot f(x)
28.10.2005 18:01 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Graf funkce v Gnuplotu
To je skvělé -- funguje to (i na dalších). Použít operátoru v Gnuplotu mne nanapadlo a navíc se jejich používání musím naučit. Člověk se stále učí.
Vyřešeno, díky moc.
S pozdravem Helena Ř.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.