dobrý večer,
měl bych zajímavý a nevšední dotaz. Rád bych vykreslil určitý počet bodů v kružnici v určitém rastru. To znamená že do funkce zadám souřadnice středu a souřadnice prvního bodu, počet vykreslujícíh bodů a vykreslilo by se to.
Našel jsem Bresenhemův algoritmus na http://www.pcsvet.cz/art/article.php?id=820
který jsem přepsal do PHP, první příklad se mi nepodařil zprovoznit jelikož nechápu zapsání "int x = 0,i1=x1,i2=x2;".
Pokud je někdo dobrý matematik, nepomohl by mi s tím? předem moc děkuju
sinus a cosinus ti nestačí?
int x = 0,i1=x1,i2=x2; se da rozepsat jako int x = 0; int i1=x1; int i2=x2;
zbi:
tobě by stačilo?
Tonik:
ani tak, pokud x je nula tak mám nějakej klikyhák a je nasmyslný nastavit i1=x1 atd. když s nima pak ani nepoperuju a nemám je nastavený...
Samozřejmě. Pokud znáš "souřadnice středu a souřadnice prvního bodu, počet vykreslujícíh bodů", pak ti k vykreslení kružnice stačí sinus a cosinus (plus sčítání a odčítání).
ja to nezkoumal, ja ti jenom napsal, co ten radek znamena
no jestli tamto nefunguje, tak snad to na wikipedii by melo: http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm - kruznice v C je az nekde dole
x = A . cos uhel
y = A . sin uhel
http://www.volny.cz/peter.mlich/www.htm#mssub9
nedaří se mi to nějak vytvořit...
peta:
všiml jsem si že máš na stránce
http://www.volny.cz/peter.mlich/Pr/efekty/hodiny.htm
máš hezky vykreslený tečky...
snažil jsem se to nějak extrahovat, ale nepodařilo se mi to, byl by si tak hodnej a nenapsal by si mi to sem? jen zobrazení těch bodů, děkuju
<HTML>Kruh se pocita od dob Archimeda a jeho PI pomoci n-uhelniku..
z tech udelas trojuhelniky a pocitas..
Znas X,Y stredu
Znas polomer (=1strana trojuhelniku)
Znas 2 stranu (360°/ pocet trojuhelniku)
Kdyz znas 2 strany znas i preponu
Za pouziti goniomet. funkci pak snadno vytvoris vzorec.</HTML>
naskýtá se další problém...týká se to javascriptu tak doufám že to enbude vadit, nechci zakládat další téma:
<head>
function obrazek()
{
a = 150;
for (i=0; i<60; i++)
{
x = a * Math.cos(i*(Math.PI/30));
y = a * Math.sin(i*(Math.PI/30));
document.getElementById("obrazek").style.top = (y+150);
document.getElementById("obrazek").style.left = (x+150);
}
}
function rotace()
{
setInterval("obrazek()", 600);
}
</head>
<body onload="rotace();">
<div>
<img src="obrazek.jpg" id="obrazek" style="position:absolute;">
</div>
obrázek se mi nepochybuje podle kružnice. zatím se mi to hýbne (asi po úsečce) a pak se zastaví a dál už se nehýbe. nevíte v čem by mohl být problém?
Vidíš, že ti stačí sinus a cosinus.
Zkus to takto:
<head>
<script>
var i=0;
function obrazek()
{
a = 150;
i = i + 1;
x = a * Math.cos(i*(Math.PI/30));
y = a * Math.sin(i*(Math.PI/30));
document.getElementById("obrazek").style.top = (y+150);
document.getElementById("obrazek").style.left = (x+150);
setTimeout('obrazek()', 100);
}
</script>
</head>
<body onload="obrazek();">
<div>
<img src="obrazek.jpg" id="obrazek" style="position:absolute;">
</div>
</body>
zbi:
ano, měl si pravdu, ono když pak člověk vidí výsledek, tak si připadá jak debil proč to tak neudělal...:-/
to tvoje funguje...děkuju
citron (renet.borec.cz)
function obrazek()
{
a = 150;
for (i=0; i<60; i++)
{
x = a * Math.cos(i*(Math.PI/30));
y = a * Math.sin(i*(Math.PI/30));
document.getElementById("obrazek").style.top = (y+150);
document.getElementById("obrazek").style.left = (x+150);
}
}
funkce, ktera vykresli kruznici.
Mno, ale jestli se to ma hybat, pak musis menit uhel, cili treba zvysovat "i", viz zbi (knizky.unas.cz)
"
a = 150;
i = i + 1;
"
Ty to delas tak, ze "i" zvysujes cyklem
"
for (i=0; i<60; i++)
"
coz je fajn, ale v dalsim casovem intervalu se provede totez od 0 do 60 a toto porad dokola. Jednodussi je zvysovat "i" do nekonecna.
document.getElementById("obrazek")
tohle bych dal asi do promenne. Nevim, jak se JS chova k opakovani stejne funkce, jestli pouzije vysledek z nejake pameni nebo jakym zpusobem provadi getElementById, ale myslim si, ze 2x zopakovany tento prikaz je jiste pomalejsi nez 1x.
var x = document.getElementById("obrazek")
x.style....
x.style....
(Math.PI/30)
to bych vyvedl jako globalni konstantu. Prepocitavat porad deleni je pomala operace
a * Math.cos
a tam by melo byt math.round zaokrouhlovani cisla, protoze v urcitem modu ti
left = "12.355789080";
nemusi fungovat
a mozna bych tam pridal jeste jednotku
left = "12.355789080";
math.round(x)+"px";
left = "12px";