Avatar billede jakwag Nybegynder
06. maj 2005 - 14:22 Der er 18 kommentarer og
1 løsning

Matematik tegning

Hej

Jeg skal animere en streg der bliver tegnet. Det er jo nemt så længe den er lige :D men når det skal være en bue bliver det svære.

Se her, den røde bliver lavet med scriptet under. Den sorte er den jeg gerne vil have. http://www.contentdepot.dk/exp/exp1.swf

var nextYLine = 300;
var nextXLine = 0;
this.moveTo(nextXLine,nextYLine);
this.onEnterFrame = function()
{
    nextXLine+= 22;
    nextYLine-=10;
    this.lineStyle(5, 0xFF0000);
    this.lineTo(nextXLine,nextYLine);
}

Så hvordan skal scriptet se ud, hvis jeg gerne vil tegne en bue?

: ) Jakob
Avatar billede nikolajdu Nybegynder
06. maj 2005 - 14:39 #1
curveTo??

this.createEmptyMovieClip("clip", 1);
clip.lineStyle(0, 0x0000FF, 100);
clip.moveTo(0, 0);
clip.curveTo(100, 200, 300, 100);
Avatar billede jakwag Nybegynder
06. maj 2005 - 14:56 #2
hehe... ja ok. men den skal være animeret som i eksemplet. altså blive tegnet.

Den må meget gerne være hakket i kanten da den egentlig bare bliver reference punkter for noget andet.

Tricket ville være at bruge curveTo og så lægge en maske på, men igen, det er ikke linien jeg skal bruge, men de forskellige punkter på den.

Hvis jeg vrøvler så sig til, så kommer jeg med et eksempel.

: )
Avatar billede pyroman Nybegynder
06. maj 2005 - 15:24 #3
Hvilken slags graf er der tale om? parabel?

Her er en halv parabel:


var x = 0;
var maxX = 400;
this.clear();
this.lineStyle(5, 0xFF0000);
function onEnterFrame(){
  var y = x*x;
  this.lineTo(x, y);
  x++;
  if(x > maxX)
    delete this.onEnterFrame;
};
Avatar billede -42- Nybegynder
06. maj 2005 - 15:30 #4
ville det være snyd, at lave en lille funktion der animerede en lille maske henover, og så kombinere det med curveTo?
Avatar billede jakwag Nybegynder
06. maj 2005 - 15:33 #5
-42-: yeps det ville være snyd ;)
Avatar billede jakwag Nybegynder
06. maj 2005 - 15:38 #6
pyroman: Ja, det er nok noget i den retning. Kan du få den til at gå ligesom den sorte streg her http://www.contentdepot.dk/exp/exp1.swf

Jeg synes din er en smule "skarp" hvis du forstår. buen må gerne være blødere.
Avatar billede jakwag Nybegynder
06. maj 2005 - 15:51 #7
Hej

Ved godt jeg er krævende.

Jeg har lavet den lidt om, prøv den her:

function drawDot(x,y)
{
    this.lineStyle(1);
    this.moveTo(x,y);
    this.lineTo(x,y+1);
}

var y = 10;
var maxY = 300;
this.clear();
this.lineStyle(5, 0xFF0000);
function onEnterFrame(){
  var x = (y*y)/20;
  drawDot(x, y);
  y++;
  if(y > maxY)
    delete this.onEnterFrame;
};

Nu laver den punkter istedet. Kan man få den til at:

1. tegne punkterne lige langt fra hinanden i starten som til slut?
2. at blive dreget f.eks. 30 grader? (hvis ikke gør det ikke noget så ryger den bare ind i et drejet mc.
Avatar billede -42- Nybegynder
06. maj 2005 - 15:58 #8
Skal man ikke nærmere kigge lidt på cirklens ligning? noget med noget cos osv??
Avatar billede pyroman Nybegynder
06. maj 2005 - 16:03 #9
Hvad er det præcist det skal bruges til? Er det bare som en tegning eller skal koordinaterne rent faktisk bruges til noget?
Altså sagt på en anden måde: Skal det bare være en lignende kurve eller en matematisk beskrevet graf??
Avatar billede jakwag Nybegynder
06. maj 2005 - 16:09 #10
Jeg skal bruge cordinaterne.

Man kan sige at den skal give cordinaterne til disse punkter:
http://www.contentdepot.dk/exp/exp1.swf
Avatar billede jakwag Nybegynder
06. maj 2005 - 16:11 #11
ved godt det er tricksy.

Jeg tror 42 måske har ret i at der skal noget cos halløj til, men matematik er ikke en af mine stærke sidder...
Avatar billede jakwag Nybegynder
06. maj 2005 - 16:11 #12
... og det er stavning åbenbart heller ikke... :)
Avatar billede -42- Nybegynder
06. maj 2005 - 16:31 #13
Begyndte lige at lege lidt... Man kan leve nogle vilde mønstre...

function drawDot(x, y) {
    this.lineStyle(1);
    this.moveTo(x, y);
    this.lineTo(x, y+1);
}
r = 20;
var y = 10;
var maxY = 300;
this.clear();
this.lineStyle(5, 0xFF0000);
function onEnterFrame() {
    var x =  Math.cos(Math.tan(y)*r)*r
    y++
    drawDot(x, y);
    if (y>maxY) {
        delete this.onEnterFrame;
    }
}
Avatar billede svendthomsen Nybegynder
06. maj 2005 - 18:13 #14
du har ret -42- det er faktisk sjovt...

function drawDot(x, y) {
    this.moveTo(x, y+76);
    this.lineTo(x, y+5);
}
var y = 1;
var maxY = 200;
this.clear();
this.lineStyle(10, 0xFF0000);
function onEnterFrame() {
    var x = (y*y)/40;
    drawDot(x, y);
    y++;
    if (y>maxY ) {
        delete this.onEnterFrame;
    }
}
Avatar billede jakwag Nybegynder
09. maj 2005 - 10:31 #15
hey

hehe.. Ja, det er sguda cool nok - men hvad blev der af min streg LOL. Nej den er måske en bid for tricky, må nok nøjes med en lige eller finde en anden metode.
Avatar billede svendthomsen Nybegynder
09. maj 2005 - 13:51 #16
lav det dog bare som et movieclip og  lav det i frames inde i movieclipet.
der er nok en måde på http://www.flashkit.com
Avatar billede jakwag Nybegynder
17. maj 2005 - 15:28 #17
hej

svendthomsen > Nej det er ikke muligt at lave det som et mc med frames i.

sådan her:

function returnXY(v, h)
{
    var ro = new Object();
    var vinkel_i_rad = -(v / 180 * Math.PI);
    ro.x = h * Math.cos(vinkel_i_rad);
    ro.y = h * Math.sin(vinkel_i_rad);
    return (ro);
}
function drawCircel(mc, radius, cx, cy, speed, sv, ev)
{
    mc.lineStyle(1);
    var hyp = radius;
    var vinkel = sv;
    var x = returnXY(vinkel, hyp).x;
    var y = returnXY(vinkel, hyp).y;
    mc.moveTo(cx + x, cy + y);
    var d = mc.getNextHighestDepth();
    createEmptyMovieClip("loop" + d, d);
    this["loop" + d].onEnterFrame = function()
    {
        var x = returnXY(vinkel, hyp).x;
        var y = returnXY(vinkel, hyp).y;
        mc.lineTo(cx + x, cy + y);
        vinkel += speed;
        if (vinkel > ev)
        {
            this.removeMovieClip();
        }
    };
}
this.createEmptyMovieClip("tegning1", 1);
drawCircel(tegning1, 800, 0, -500, 0.5, 270, 313.5);

Jeg er hård i dag, så der er ingen point... Men tak for forsøgende :D

: ) Jakob
Avatar billede jakwag Nybegynder
17. maj 2005 - 15:49 #18
... og så kan man jo begynde at lege:
(sæt framerate til 50)

function returnXY(v, h)
{
    var ro = new Object();
    var vinkel_i_rad = -(v / 180 * Math.PI);
    ro.x = h * Math.cos(vinkel_i_rad);
    ro.y = h * Math.sin(vinkel_i_rad);
    return (ro);
}
function drawCircel(mc, radius, cx, cy, speed, sv, ev)
{
    mc.lineStyle(1);
    var hyp = radius;
    var vinkel = sv;
    var x = returnXY(vinkel, hyp).x;
    var y = returnXY(vinkel, hyp).y;
    mc.moveTo(cx + x, cy + y);
    var d = mc.getNextHighestDepth();
    mc.createEmptyMovieClip("loop" + d, d);
    mc["loop" + d].onEnterFrame = function()
    {
        var x = returnXY(vinkel, hyp).x;
        var y = returnXY(vinkel, hyp).y;
        mc.lineTo(cx + x, cy + y);
        vinkel += speed;
        hyp += 0.1;
        if (vinkel > ev)
        {
            this.removeMovieClip();
        }
    };
}
var d = 0;
this.onEnterFrame = function()
{
    var x = Math.random()*550;
    var y = Math.random()*400;
    this.createEmptyMovieClip("tegning"+d, d);
    drawCircel(this["tegning" + d], 1, x, y, 10, 0, 1000);
    d++;
};
Avatar billede jakwag Nybegynder
17. maj 2005 - 15:50 #19
function returnXY(v, h)
{
    var ro = new Object();
    var vinkel_i_rad = -(v / 180 * Math.PI);
    ro.x = h * Math.cos(vinkel_i_rad);
    ro.y = h * Math.sin(vinkel_i_rad);
    return (ro);
}
function drawCircel(mc, radius, cx, cy, speed, sv, ev)
{
    mc.lineStyle(1);
    var hyp = radius;
    var vinkel = sv;
    var x = returnXY(vinkel, hyp).x;
    var y = returnXY(vinkel, hyp).y;
    mc.moveTo(cx + x, cy + y);
    var d = mc.getNextHighestDepth();
    mc.createEmptyMovieClip("loop" + d, d);
    mc["loop" + d].onEnterFrame = function()
    {
        var x = returnXY(vinkel, hyp).x;
        var y = returnXY(vinkel, hyp).y;
        mc.lineTo(cx + x, cy + y);
        vinkel += speed;
        hyp+=0.2;
        if (vinkel > ev)
        {
            this.removeMovieClip();
        }
    };
}
this.createEmptyMovieClip("tegning1", 1);
drawCircel(tegning1, 1, 200, 200, 10, 0,7200);
this.createEmptyMovieClip("tegning2", 2);
drawCircel(tegning2, 1, 200, 220, 10, 0,7200);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester