با سلام خدمت همه دوستان زحمتکش و خوبم.
اگه میشه در مورد رسم نقطه و خط و مقیاس بندی فرم کمی توضیح بفرمایید.
چون بارسم نقطه میشه توابع رو هم رسم کرد.آیا در دات نت هم مثل vb6 برای رسم نقطه از دستور pset استفاده میشه؟ اگه نه ، لطفا راهنمایی کنید.
با تشکر
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler Me.Paint, AddressOf Draw
End Sub
Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim x As Long, y As Long
Dim b As New Bitmap(1, 1)
e.Graphics.Clear(Color.White)
b.SetPixel(0, 0, Color.Black)
For x = 0 To Width - 1
y = Math.Sin(2 * Math.PI * x / Width) * (e.ClipRectangle.Height / 2 - 20)
e.Graphics.DrawImageUnscaled(b, x, y + e.ClipRectangle.Height / 2)
Next
End Sub
End Class
نه، کلا شیوه ترسیم در Net. با شیوه Visual Basic 6 کاملا متفاوته، دیگه چیزی به اسم PSet وجود نداره، کمی
دشواره تره، البته امکانات برای ترسیم خیلی کاملتره از Visual Basic 6 است. جالب اینکه برای ترسیم کردن نقطه
فرمان خاصی تعریف نشده. برای ترسیم کردن نقطه یک تصویر 1 در 1 پیکسلی را رسم می کنیم.
کد زیر در خود فرم یک منحنی سینوسی را رسم می کند :
کد:Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Me.Paint, AddressOf Draw End Sub Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Dim x As Long, y As Long Dim b As New Bitmap(1, 1) e.Graphics.Clear(Color.White) b.SetPixel(0, 0, Color.Black) For x = 0 To Width - 1 y = Math.Sin(2 * Math.PI * x / Width) * (e.ClipRectangle.Height / 2 - 20) e.Graphics.DrawImageUnscaled(b, x, y + e.ClipRectangle.Height / 2) Next End Sub End Class
ابعاد ترسیم رو باید بر حسب PictureBox قرار بدید، یعنی هر چی Width است روی PictureBox1 قرار دهید،سلام دوست خوبم.
من کدهاتون رو روی picture box امتحان کردم ولی کیفیتش یه کم اومد پایین .در ضمن منحنی نسبت به محور y قرینه میشد که البته با قراردادن علامت منفی در ابتدای تابع مشکلم حل شد ولی نمیدونم چطوری مقیاس بندی رو انجام بدم.اگه میشه دوباره کمکم کنید.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler [B][COLOR="Blue"]PictureBox1[/COLOR][/B].Paint, AddressOf Draw
End Sub
Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim x As Long, y As Long
Dim b As New Bitmap(1, 1)
e.Graphics.Clear(Color.White)
b.SetPixel(0, 0, Color.Black)
For x = 0 To [B][COLOR="Blue"]PictureBox1[/COLOR][/B].Width - 1
y = -Math.Sin(2 * Math.PI * x / [B][COLOR="Blue"]PictureBox1[/COLOR][/B].Width) * (e.ClipRectangle.Height / 2 - 20)
e.Graphics.DrawImageUnscaled(b, x, y + e.ClipRectangle.Height / 2)
Next
End Sub
End Class
ابعاد ترسیم رو باید بر حسب PictureBox قرار بدید، یعنی هر چی Width است روی PictureBox1 قرار دهید،
رخداد هم که باید PictureBox1.Paint باشد :
کد:Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler [B][COLOR=Blue]PictureBox1[/COLOR][/B].Paint, AddressOf Draw End Sub Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Dim x As Long, y As Long Dim b As New Bitmap(1, 1) e.Graphics.Clear(Color.White) b.SetPixel(0, 0, Color.Black) For x = 0 To [B][COLOR=Blue]PictureBox1[/COLOR][/B].Width - 1 y = -Math.Sin(2 * Math.PI * x / [B][COLOR=Blue]PictureBox1[/COLOR][/B].Width) * (e.ClipRectangle.Height / 2 - 20) e.Graphics.DrawImageUnscaled(b, x, y + e.ClipRectangle.Height / 2) Next End Sub End Class
سلام دوست خوبم.
من این کاری که فرمودید رو انجام دادم ولی توابع نمایی رو به شکل یه ضربدر رسم میکنه و هر کار میکنم هم درست نمیشه.
ممنون میشم اگه راهنماییم کنید.در ضمن میخوام اگه بشه مبدا مختصات به وسط picturebox منتقل بشه و محورهای مختصات هم روش کشیده بشه.من از دستور رسم خط در vb6 استفاده کردم ولی جواب نداد.
متشکرم.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler PictureBox1.Paint, AddressOf Draw
End Sub
Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim x As Long, i As Double
Dim p1 As Point, p2 As Point
Dim o As Point = New Point(e.ClipRectangle.Width / 2, e.ClipRectangle.Height / 2)
e.Graphics.Clear(Color.White)
e.Graphics.DrawLine(Pens.Blue, 3, o.Y, PictureBox1.Width - 6, o.Y)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X, PictureBox1.Height - 6)
e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y - 3)
e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y + 3)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X - 3, 9)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X + 3, 9)
For x = 20 To PictureBox1.Width - 20
i = ((x - 20) / (PictureBox1.Width - 40) * 4 - 2) * Math.PI
p2.X = x
p2.Y = -Math.Sin(i) * (e.ClipRectangle.Height / 2 - 20) + o.Y
If x > 20 Then
e.Graphics.DrawLine(Pens.Black, p1, p2)
End If
p1 = p2
Next
End Sub
End Class
با عرض سلام دوباره. من این کاری رو که فرمودید انجام دادم و مشکلم حل شد.فقط نمیدونم این تابعی که تعریف کرده اید رو چجوری تو رخدادهای یک button فراخوانی کنم.اولش فکر کردم مثل ++C فراخوانی میشه .ولی نشد که نشد. بعضی وقت ها هم توابع نمایی مثل Exp (i) رو رسم نمیکنه و یک ضربدر رو کل picturebox میکشه. اگه میشه لطف کنید و در این مورد هم توضیح بدید.کدوم تابع نمایی رو شکل ضربدر رسم می کنه؟ شما موقع رسم کردن نقطه می توانید هر مقداری رو به x و y اضافه کنید و یا کم کنید تا موقعیت اش جابجا بشه. مختصات وسط PictureBox هم که مشخصه، نصف طول و نصف عرض. برای رسم کردن خط هم که از دستور Graphics.DrawLine استفاده خواهید کرد. می توانید فلش سر محور ها رو هم رسم کنید.کد:Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler PictureBox1.Paint, AddressOf Draw End Sub Private Sub Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Dim x As Long, i As Double Dim p1 As Point, p2 As Point Dim o As Point = New Point(e.ClipRectangle.Width / 2, e.ClipRectangle.Height / 2) e.Graphics.Clear(Color.White) e.Graphics.DrawLine(Pens.Blue, 3, o.Y, PictureBox1.Width - 6, o.Y) e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X, PictureBox1.Height - 6) e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y - 3) e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y + 3) e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X - 3, 9) e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X + 3, 9) For x = 20 To PictureBox1.Width - 20 i = ((x - 20) / (PictureBox1.Width - 40) * 4 - 2) * Math.PI p2.X = x p2.Y = -Math.Sin(i) * (e.ClipRectangle.Height / 2 - 20) + o.Y If x > 20 Then e.Graphics.DrawLine(Pens.Black, p1, p2) End If p1 = p2 Next End Sub End Class
با عرض سلام دوباره. من این کاری رو که فرمودید انجام دادم و مشکلم حل شد.فقط نمیدونم این تابعی که تعریف کرده اید رو چجوری تو رخدادهای یک button فراخوانی کنم.اولش فکر کردم مثل ++C فراخوانی میشه .ولی نشد که نشد.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
[B][COLOR="Blue"] PictureBox1.Invalidate()[/COLOR][/B]
End Sub
بعضی وقت ها یعنی دقیقا چه وقتی؟ تا یک نمونه کد کامل برنامه که این مشکل بوجود میاد رو ارائه نکنیدبعضی وقت ها هم توابع نمایی مثل Exp (i) رو رسم نمیکنه و یک ضربدر رو کل picturebox میکشه. اگه میشه لطف کنید و در این مورد هم توضیح بدید.
الان من پروژه ای رو که روش کار میکنم رو براتون قرار دادم.که Exp(2*i) رو به شکل ضربدر رسم میکنه.تابع Draw توسط رخداد Paint فراخوانی میشه، یعنی زمانی که PictureBox باید رسم بشه بصورت خودکار Draw
هم فراخوانی میشه. برای اینکه خودتون اینکار رو انجام بدید باید کاری کنید که رخداد Paint اتفاق بیافته، یعنی
PictureBox رو وادار به رسم شدن بکنید :
Invalidate کردن باعث میشه که تصویر مجدد رسم بشه، یعنی رخداد Paint اتفاق بیافته.کد:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click [B][COLOR=Blue] PictureBox1.Invalidate()[/COLOR][/B] End Sub
بعضی وقت ها یعنی دقیقا چه وقتی؟ تا یک نمونه کد کامل برنامه که این مشکل بوجود میاد رو ارائه نکنید
نمی تونم تشخیص بدم که مشکل تون از چیه.
الان من پروژه ای رو که روش کار میکنم رو براتون قرار دادم.که Exp(2*i) رو به شکل ضربدر رسم میکنه.
در ضمن میخوام با لود شدن فرم picyurebox خالی بمونه و فقط با کلیک روی button رخداد رسم اجرا بشه.
میشه از متغیرهایی که داخل رخدادهای button تعریف شدند رو در داخل تابعی که رسم میکنه استفاده کنم؟چون نمودار من بر اساس این متغیرها باید رسم بشه.در قسمت general هم خواستم اونا رو به صورت عمومی تعریف کنم ولی ایراد میگرفت.فکر کنم اینجل هم با Vb6 فرق کرده.
متشکرم
Public Class Form1
Dim paintEnabled As Boolean
Dim s As Double
Dim r As Single
Dim a As Single
Dim b As Single
Dim m As Single
Dim n As Single
Dim y As String
Dim delta As Single
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler PictureBox1.Paint, AddressOf draw
End Sub
Private Sub draw(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim x As Long, i As Double
Dim p1 As Point, p2 As Point
Dim o As Point = New Point(e.ClipRectangle.Width / 2, e.ClipRectangle.Height / 2)
e.Graphics.Clear(Color.White)
e.Graphics.DrawLine(Pens.Blue, 3, o.Y, PictureBox1.Width - 6, o.Y)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X, PictureBox1.Height - 6)
e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y - 3)
e.Graphics.DrawLine(Pens.Blue, PictureBox1.Width - 7, o.Y, PictureBox1.Width - 12, o.Y + 3)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X - 3, 9)
e.Graphics.DrawLine(Pens.Blue, o.X, 3, o.X + 3, 9)
If paintEnabled = False Then Exit Sub
For x = 0 To PictureBox1.Width
Try
i = 10 * (x - o.X) / o.X
p2.X = x
p2.Y = -Math.Truncate(Math.Exp(i)) + o.Y
If p1.IsEmpty = False Then
e.Graphics.DrawLine(Pens.Black, p1, p2)
End If
p1 = p2
Catch ex As Exception
End Try
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
r = Val(TextBox6.Text)
Dim ee As Single
ee = Val(TextBox1.Text)
Dim l As Single
l = Val(TextBox8.Text)
Dim c As Single
c = Val(TextBox4.Text)
Dim w As Single
w = Val(TextBox2.Text)
s = w * l - 1 / (w * c)
a = (-ee * s) / (r ^ 2 + s ^ 2)
b = (ee * r) / (r ^ 2 + s ^ 2)
delta = r ^ 2 - 4 * l * (1 / c)
a = Math.Round(a, 4)
b = Math.Round(b, 4)
Select Case delta
Case Is > 0
m = (-r + Math.Sqrt(delta)) / (2 * l)
n = (-r - Math.Sqrt(delta)) / (2 * l)
m = Math.Round(m, 3)
n = Math.Round(n, 3)
y = "c1e^" & Str(m) & "t" & "+ C2e^" & Str(n) & "t" & "+ " & Str(a) & "cos(" & Str(w) & "t) + " & Str(b) & "sin(" & Str(w) & "t)"
Case Is = 0
m = (-r) / (2 * a)
m = Math.Round(m, 3)
y = "c1e^" & Str(m) & "t" & "+ C2te^" & Str(m) & "t" & "+ " & Str(a) & "cos(" & Str(w) & "t) + " & Str(b) & "sin(" & Str(w) & "t)"
Case Is < 0
delta = -delta
m = (-r + Math.Sqrt(delta)) / (2 * l)
n = (-r - Math.Sqrt(delta)) / (2 * l)
m = Math.Round(m, 3)
n = Math.Round(n, 3)
y = "e^" & Str(-r / 2) & "t" & "( Cos(" & Str(m) & "t) + Sin(" & Str(n) & "t) )" & "+ " & Str(a) & "cos(" & Str(w) & "t) + " & Str(b) & "sin(" & Str(w) & "t)"
End Select
paintEnabled = True
PictureBox1.Invalidate()
End Sub
End Class
مشاهده پیوست 112001 سلام دوستان من كد چند دايره توهم رو ميخواستم به زبان ويژال بيسيك
نميخوام حركت كنن فقط كدشو بزنم چند دايره توهم نمايان بشه شكل دقيق اينو ميخوام ممنون ميشم كمك كنيد
Imports System.Drawing.Drawing2D
Public Class Form1
Private Const W As Integer = 50
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
Dim center As New Point(ClientSize.Width / 2, ClientSize.Height / 2)
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
DrawCircle(e.Graphics, center.X, center.Y, W)
DrawCircle(e.Graphics, center.X, center.Y, W * 1.5)
DrawCircle(e.Graphics, center.X, center.Y, W * 2)
DrawCircle(e.Graphics, center.X - W, center.Y, W)
DrawCircle(e.Graphics, center.X + W, center.Y, W)
DrawCircle(e.Graphics, center.X, center.Y - W, W)
DrawCircle(e.Graphics, center.X, center.Y + W, W)
End Sub
Private Sub DrawCircle(g As Graphics, x As Integer, y As Integer, size As Integer)
g.DrawEllipse(Pens.Black, New Rectangle(x - size / 2, y - size / 2, size, size))
g.DrawEllipse(Pens.Black, New Rectangle(x - 2, y - 2, 4, 4))
End Sub
End Class
عنوان تاپیکی که داخلش سوال کردید رو مشاهده بفرمایید، رسم اشکال با ویژوال بیسیک دات نت.خيلي ممنون اما اين ويژال بيسيكه چيزي كه سر جلسه بود RGb داشت crile داشت از اينا يا كلا دايره كدش فرق داره
بیسیک یکی دو تا کامپایلر نداره، کامپایلر های خیلی متنوعی داره، نمیدونم تو چه محیطی کد نویسی می کنید، ولی به هر حال سوال تون مربوط به این تاپیک نبوده، نباید در این تاپیک سوال می پرسیدید. باید خودتون یک تاپیک میساختید :ارور میده کد من همچین کدی میخوام برای عکسی که فرستادم قبلا این کد یه چیز دیگس اما میخوام مث همین باشه ببخشید نمیدونم که عنوان کنم اینجا پست میدم
CIRCLE (4000, 3000), 800, RGB(0, 0, 0)
CIRCLE (2400, 3000), 800, RGB(0, 0, 0)
CIRCLE (5600, 3000), 800, RGB(0, 0, 0)
CIRCLE (4000, 1400), 800, RGB(0, 0, 0)
CIRCLE (4000, 4600), 800, RGB(0, 0, 0)
CIRCLE (4000, 3000), 1200, RGB(0, 0, 0)
CIRCLE (4000, 3000), 1600, RGB(0, 0, 0)
CIRCLE (4000, 3000), 30, RGB(0, 0, 0)
CIRCLE (2400, 3000), 30, RGB(0, 0, 0)
CIRCLE (5600, 3000), 30, RGB(0, 0, 0)
CIRCLE (4000, 1400), 30, RGB(0, 0, 0)
CIRCLE (4000, 4600), 30, RGB(0, 0, 0)
سلام ادمین عزیز
کد:Imports System.Drawing.Drawing2D Public Class Form1 Private Const W As Integer = 50 Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint Dim center As New Point(ClientSize.Width / 2, ClientSize.Height / 2) e.Graphics.SmoothingMode = SmoothingMode.AntiAlias DrawCircle(e.Graphics, center.X, center.Y, W) DrawCircle(e.Graphics, center.X, center.Y, W * 1.5) DrawCircle(e.Graphics, center.X, center.Y, W * 2) DrawCircle(e.Graphics, center.X - W, center.Y, W) DrawCircle(e.Graphics, center.X + W, center.Y, W) DrawCircle(e.Graphics, center.X, center.Y - W, W) DrawCircle(e.Graphics, center.X, center.Y + W, W) End Sub Private Sub DrawCircle(g As Graphics, x As Integer, y As Integer, size As Integer) g.DrawEllipse(Pens.Black, New Rectangle(x - size / 2, y - size / 2, size, size)) g.DrawEllipse(Pens.Black, New Rectangle(x - 2, y - 2, 4, 4)) End Sub End Class