Hej. som vanligt är det ingen som är sugen på att titta på färdiga program. var vänlig och visa den rutinen som ritar upp ljudkurvan samt det indata som du skickar till den. Okej, jag trodde det skulle vara lättare att titta på ett projekt, men okej, här kommer all kod: Jag har kikat på koden. Men det är tyvär för dåligt namngivna variabler. För lite kommentarer. För många hårdkodade värden. För att jag ska ens försöka sätta mig in i din kod. Jag har själv inte direkt nån koll på den här koden, och det är det som är problemet. Jag vill kunna variera den lite, om man så säger.Problem med diagram i en picturebox
(mitt projekt måste provas för att ni ska se "problemet" - se nedan)
Jag skulle verkligen behöva en del hjälp med det här projektet.
Det är en del av ett större program för beräkning av högtalarlådor, och det använder sig av en enkel picturebox där programmet ritar ljudkurvan. Jag har tidigare fått hjälp med själva modellen för diagrammet, men jag kan inte lista ut hur jag går vidare och gör diagrammets höjd/bredd valbar, så att alla variabler följer med och visar en korrekt kurva oavsett diagramstorlek...
Vidare så skulle jag vilja ha "frekvensomfånget" valbart. I exemplet är frekvensgången 20-200 Hz. Och nivån -30 till +10dB. Jag vill låta användaren bestämma dessa saker.
Tacksam för tips
Test-projektet kan plockas hem här (5kb):
http://m1.492.telia.com/~u49206085/_diagram.zipSv: Problem med diagram i en picturebox
Sv: Problem med diagram i en picturebox
<code>
'Variabler för placering av grafik
Global x1, y1 'Övre vänstra hörnet
Global x2, y2 'Nedre högra hörnet
Sub drawgrid()
'Ritar koordinatsystem
ReDim xaxis$(20)
xaxis$(1) = "20"
xaxis$(2) = "30"
xaxis$(3) = "40"
xaxis$(4) = "50"
xaxis$(5) = "60"
xaxis$(7) = "80"
xaxis$(9) = "100"
xaxis$(10) = "200"
main.graph.CurrentX = x1 - 350
main.graph.CurrentY = y1 - 250
main.graph.Print "dB"
main.graph.CurrentX = x2
main.graph.CurrentY = y2 + 300
main.graph.Print "Hz"
dB = 14
For Y = y1 To y2 Step (y2 - y1) / 10
main.graph.Line (595, 1240)-(5300, 1240) '0 db-linjen
main.graph.Line (x2, Y)-(x1, Y)
dB = dB - 4
main.graph.CurrentX = main.graph.CurrentX - 400
main.graph.CurrentY = main.graph.CurrentY - 75
main.graph.Print dB
Next Y
For F = 20 To 200 Step 10
If F <= 100 Or F = 200 Then
x = Log10(F / 20) * (x2 - x1) + x1
main.graph.Line (x, y1)-(x, y2)
main.graph.CurrentX = x - 100
main.graph.CurrentY = y2 + 120
i = i + 1
main.graph.Print xaxis$(i)
End If
Next F
End Sub
Static Function Log10(x)
'Beräknar 10-logaritm
Log10 = Log(x) / Log(10#)
End Function
Private Sub calc_Click()
graph.Cls
drawgrid
'Variabler som beräknas:
typeB = 1 '1 = basreflex, 0 = sluten låda
Fb = 35 'Lådans avstämningsfrekvens i Hz
VB1 = 80 'Lådans volym i liter
fs = 30 'Elementets resonansfrekvens i Hz
q = 0.33 'Elementets Q-värde (qts)
vas = 144 'Elementets ekvivalenta volym i liter
numelemB = 1 'Antal högtalarelement
pushpullB = False 'isobarik eller ej
'------------------------------------
VB1 = VB1 / numelemB
If pushpullB Then VB1 = VB1 * 2
If typeB = 0 Then Fb = 0
A = Fb ^ 2 / fs ^ 2
B = A / q + Fb / (7 * fs)
C = 1 + A + Fb / (7 * fs * q) + vas / VB1
D = 1 / q + Fb / (7 * fs)
aa = -40 / (y2 - y1)
bb = 10 - y1 * aa
graph.DrawWidth = 2
graph.ForeColor = QBColor(9)
For F = 10 To 198
If F > 100 Then F = F + 2
fn = F / fs
resp = fn ^ 4 / Sqr((fn ^ 4 - C * fn ^ 2 + A) ^ 2 + (B * fn - D * fn ^ 3) ^ 2)
dB = 20 * Log10(resp)
If dB > 10 Then dB = 10
If dB < -30 Then dB = -30
Y = (dB - bb) / aa
x = Log10(F / 20) * (x2 - x1) + x1
If F = 10 Then
graph.PSet (x, Y)
Else
graph.Line -(x, Y)
End If
Next F
graph.DrawWidth = 1
graph.ForeColor = QBColor(0)
End Sub
</code>Sv: Problem med diagram i en picturebox
Sv: Problem med diagram i en picturebox
Hela "drawgrid"-rutinen är en djungel för mig. Kan inte få grepp om den.
I "calc" körs alltså beräkningen och plottar kurvan. De variabler som beräknas är de som är kommenterade. Den här koden är ett förenklat utdrag ut programmet, och jag valde att sätta in riktiga värden istället för att skriva "Vas = txtvas" eller liknande. Inga variabler är heller dimmade, mest för att spara utrymme här.
Jag förstår att det är svårt att sätta sig in i den här kryptiska koden. Jag förstår den ju inte själv. Ett provkörningsbart projekt finns i filen jag länkar i mitt första inlägg.