[ Yoba @ 13.03.2010. 17:23 ] @
Imam problem sa crtanjem sinusoide, cini mi se da je code ok ali mi je slichica "zguzvana"

Code:

pic1.ScaleMode = vbUser

pic1.Scale (0, 50)-(360, -50)

pic1.Line (0, 0)-(0, 0)


For x = 0 To 360 Step 0.05
y = Sin(x)
pic1.Line -Step(x, y), vbBlue

Debug.Print x; y

Next x


[att_img]
[ Yoba @ 13.03.2010. 18:02 ] @
Ne mogu uopste da ukapiram u cemu je problem, npr

Code:

Dim x As Double
Dim y As Double

pic2.ScaleMode = vbUser

pic2.Scale (0, 100)-(10, 0)

pic2.Line (0, 0)-(0, 0)

For x = 0 To 10 Step 1
y = x * x

pic2.Line -Step(x, y), vbRed

Next x

pic2.Line (0, 0)-(10, 100), vbBlue

SavePicture pic2.Image, "C:\diff.bmp"


i dobijem

[att_img]


jasno je da bi se crvena kriva i plava linije trebale sresti u gornjoj tacki 10,100 <x=10 -> y=x*x=10*10=100



[ chkalja @ 15.03.2010. 14:04 ] @
Koliko se secam sin(x) funkcija nije u stepenima

Trebalo bi da posluzi

PI=3.14
sin(x*PI/180)

PI je u radijanima i jednak je 180 stepeni, tj 2PI je ceo krug.
Mislim da ima i vec definisana konstanta PI (vidi u helpu)
[ Yoba @ 15.03.2010. 16:50 ] @
Potpuno si u pravu, sin(x) trazi da se x unese u radijanima, nije mi to uopse palo na pamet.


Ali, problem i dalje ostaje, ne dobijem sinusoidu?
[ Yoba @ 17.03.2010. 17:26 ] @
help, anyone? tip?
[ VBscout @ 18.03.2010. 08:43 ] @
Kad se već niko ne javlja.....

Pošto dugo nisam radio ove stvari sa iscrtavanjima u VB6, jedino ti mogu predložiti da ako si malo vičan programiranju sve to odradiš u Matlabu, sa GUI interfejsom,jednostavno, "5 minuta posla...." (ako praviš program za sopstvenu upotrebu, koji verovatno nije složen?).

Onda možes iscrtavati šta god hoćeš i kako god hoćeš.
[ vujkev @ 18.03.2010. 10:13 ] @
evo ga kod u vb.net-u koji radi. Nadam se da ti neće biti problem da ga pretvoriš u VB6
Code:

 Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
        Dim g As Graphics = Me.CreateGraphics
        For x As Integer = 0 To 460
            Dim p As Point
            p.X = x + 100
            p.Y = CInt(Math.Sin(x * Math.PI / 180) * 100) + 100

            Dim p1 As Point
            p1.X = p.X + 1
            p1.Y = p.Y
            g.DrawLine(Pens.Black, p, p1)
        Next
    End Sub
[ chkalja @ 18.03.2010. 14:04 ] @

Da nije mozda ScaleWidth i ScaleHight, valjda trebaju da budu isti.
Nisam skoro radio u VB, pa mozda lupam gluposti
[ Yoba @ 18.03.2010. 17:04 ] @
@VBscout


Nije nikakav prog vec neka matematika. Prvo sto sam hteo da uradim je da nacrtam u Excelu, but guess what? Excel ne moze da crta funkcije sa opseg vec moraju da se izracunaju tacke tj parovi x,y i onda on od toga generise funkciju..prilicno bez vez. Sledece po redu cega sam se dovatio je VB i relativno lako sam zbudzio proceduru ali nije ispala kako treba :)
Sa Matlabom se nisam nikada druzio, sa Mathematicom jesam davno, vise se i ne secam sintakse :)

@vujkev

prevedeno u VB je

Code:

Private Type Point
x As Integer
y As Integer
End Type


Private Sub Command1_Click()


Dim x As Integer
Dim p0 As Point
Dim p1 As Point
     
        
        pic1.Scale (100, 560)-(560, -560)
        
                
        For x = 0 To 460
            p0.x = x + 100
            p0.y = CInt(Sin(x * 3.14 / 180) * 100) + 100

            p1.x = p0.x + 1
            p1.y = p0.y
            
                      
            pic1.Line (p0.x, p0.y)-(p1.x, p1.y), vbRed
                      
        Next
        
        
End Sub


[att_img]

Ako sam dobro razumeo ti interpoliras f-ciju kao mnogo "malih" horizontalnih linija (0,0 - 1,0 na scali od 560x100) . A ne "dijagonalno" duz funkcije?
[ vujkev @ 18.03.2010. 17:51 ] @
u .net-u ne znam kako da nacrtam jednu tačku i ovo mi je bilo najlakše i najbrže da napravim :) Naravno ti napravi kako god hoćeš
[ Yoba @ 18.03.2010. 18:13 ] @
;)

Point je info o boji tachke

a sa Pset se setuje boja tacke :>