Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Public Class Form1




Public Class Form1

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim ps() As Point = {New Point(10, 10), New Point(110, 110), New Point(10, 110), New Point(110, 10)}

e.Graphics.DrawLines(New Pen(Color.Red, 4), ps)

End Sub

End Class

Прямокутник

Метод DrawRectangle класу Graphics дозволяє створювати прямокутники.

У цьому методі є або два, або п'ять параметрів: перо, що його створює, а також або екземпляр структури Rectangle, або чотири числа, параметри, що описують його координати верхнього лівого кута, ширину і висоту.

Заповнений прямокутник малюється методом FillRectangle, у якому, на відміну від методу DrawRectangle, замість пера задається кисть.

У наступному коді створюється прямокутник заповнений градієнтною заливкою.

Прямокутник

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim g As Graphics = e.Graphics

Dim rect As New Rectangle(270, 10, 100, 210)

Dim lbr As New Drawing2D.LinearGradientBrush(rect, Color.Red, Color.Yellow, Drawing2D.LinearGradientMode.BackwardDiagonal)

g.FillRectangle(lbr, rect)

End Sub

End Class

Прямокутники

Використовуючи метод Drawrectangles можна створити декілька багатокутників. Параметрами цього методу є перо і масив прямокутників.

 

Dim pen As New Pen(Color.Black, 3)

 

Нижче приведений спосіб побудови трьох прямокутників. У цьому коді створюється масив з трьох екземплярів Rectangle а потім всі три прямокутники будуються одночасно методом Draw Rectangle.

 

Dim rect As Rectangle() = {New Rectangle(10, 10, 150, 150),

New Rectangle(30, 30, 110, 110), New Rectangle(50, 50, 70, 70)}

e.Graphics.DrawRectangles(pen, rect)

 

Еліпс

Еліпс, або круг, створюється методами DrawEllipse, параметрами яких є екземпляр класу Pen, що малює контур, а також прямокутник, в який еліпс вписаний. Прямокутник може бути заданий як екземпляр класу Rectangle або RECTANGLEF, або за допомогою вказівки координати його верхнього лівого кута (х, у), а також ширини width і висоти height.

Заповнений еліпс малюється методами FillEllipse, у яких, на відміну від методу DrawEllipse, замість пера задається кисть.

Еліпси

Public Class Form1

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim g As Graphics = e.Graphics

Dim pn As New Pen(Color.Blue, 2)

Dim i As Integer

For i = 0 To 10

g.DrawEllipse(pn, 10 + 5 * i, 10, 200 - 10 * i, 200)

Next

Dim rect As New Rectangle(70, 70, 80, 80)

Dim br As New SolidBrush(Color.Red)

g.FillEllipse(br, rect)

End Sub

End Class

Дуга і сектор

Дуга створюється методами DrawArc, параметрами яких є екземпляр класу Pen, що малює контур, а також прямокутник (частиною якого є дуга), в який еліпс вписаний. Прямокутник може бути заданий як екземпляр класу Rectangle або RECTANGLEF або за допомогою вказівки координати його верхнього лівого кута (х, у), а також ширини width і висоти height. Дуга ж еліпса визначається її кутовим розміром sweepAngie і початковим кутом startAngie, який відлічується за годинниковою стрілкою від осі абсцис.

Приклад дуг і секторів

Public Class Form1

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim g As Graphics = e.Graphics

Dim pn As New Pen(Color.Blue, 2)

Dim i As Integer

For i = 0 To 10

g.DrawArc(pn, 10 + 5 * i, 10, 200 - 10 * i, 200, 0, 135)

Next

Dim hb As New Drawing2D.HatchBrush(Drawing2D.HatchStyle.LargeConfetti, Color.Cornsilk)

For i = 0 To 359 Step 120

g.FillPie(hb, 10, 10, 110, 110, i, 60)

Next

End Sub

End Class

Криві Без’є

Криві Безье будуються по чотирьох точках, тобто параметрами методу DrawBezier, окрім пера, є чотири екземпляра класу Point або класу POINTF – чотири крапки. Різниця між ними полягає в тому, що клас Point містить дані типу Integer, а клас POINTF - дані типу Singler. У наступному коді в якості параметрів використані координати точок (x, у).

 

Dim pen As New Pen(Color.Black, 3)

e.Graphics.DrawBezier(pen, 220, 220, 340, 270, 220, 320, 340, 370)

Крива, замкнута крива (сплайн)

Параметром методів DrawClosedCurve і DrawCurve є масив точок. У коді, наведеному нижче, оголошується змінна point, значенням якої є масив точок і по цьому параметру будується звичайний і замкнутий сплакни:

 

Dim point1() As Point = {New Point(20, 20), New Point(150, 30), New Point(220, 50), New Point(70, 70), New Point(70, 10)}

Dim point2() As Point = {New Point(20, 150), New Point(150, 160), New Point(180, 220), New Point(70, 200), New Point(70, 140)}

Dim pen As New Pen(Color.Red, 5)

e.Graphics.DrawCurve(pen, point1)

e.Graphics.DrawClosedCurve(pen, Point2)

 

Сегмент

Сегмент створюється методом DrawPie, який має наступні параметри: перо, екземпляр структури Rectangle (тобто для побудови сегменту необхідні параметри чотирикутника), кутовий розмір і початковий кут. Нижче наведені різні варіанти побудови сегменту:

 

Dim pen As New Pen(Color.Brown, 3)

e.Graphics.DrawPie(pen, 10, 10, 150, 150, 330, 250)

Dim k As Integer

For k = 0 To 360 Step 120

e.Graphics.DrawPie(pen, 10, 300, 150, 150, k, 180)

Next

Dim i As Integer

For i = 0 To 10

e.Graphics.DrawPie(pen, 200 + 5 * i, 10, 200, 200 - 10 * i, 0, 180)

Next

 

Багатокутники

Багатокутник, або замкнуті ламані лінії, створюється методами DrawPolygon, параметрами яких є екземпляр класу Pen, що визначає стиль контура, а також масив вершин багатокутника.

Заповнений багатокутник малюється методами Fillpolygon, у яких, на відміну від методу DrawPolygon, замість пера задається кисть.

Приклади багатокутників

Public Class Form1

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim ps1() As Point = {New Point(60, 10), New Point(110, 110), New Point(10, 60), New Point(150, 60), New Point(30, 110)}

e.Graphics.DrawPolygon(New Pen(Color.Red, 4), ps1)

Dim ps2(4), ps3(4) As Point

Dim i As Integer

For i = 0 To ps1.GetUpperBound(0)

ps2(i).X = ps1(i).X + 100

ps2(i).Y = ps1(i).Y + 100

ps3(i).X = ps1(i).X + 200

ps3(i).Y = ps1(i).Y + 200

Next

e.Graphics.FillPolygon(New SolidBrush(Color.Red), ps2,_ Drawing2D.FillMode.Winding)

e.Graphics.FillPolygon(New SolidBrush(Color.Red), ps3,_ Drawing2D.FillMode.Alternate)

End Sub

End Class

Відображення тексту

Текст в класі Graphics виводиться одним з методом Drawstring. Загальними параметрами цих методів є параметр s, що задає відображуваний текст, параметр font — його шрифт і параметр brush — перо, що його малює.

Точка виведення тексту задається або парою координат, або екземпляром класу POINTF. Параметр layoutRectangle задає прямокутну область, в якій повинен розміститися текст. Якщо яка-небудь частина тексту виходить за межі цієї області, то вона не відображається. Параметр format, що має тип stringFormat, дозволяє встановити додаткові атрибути форматування тексту, такі як вирівнювання, перенесення слів.

Виведення тексту

Public Class Form1

Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim g As Graphics = e.Graphics

Dim brBlack As Brush = Brushes.Black

Dim brRed As Brush = Brushes.Red

Dim fntC As New Font("Courier", 18)

Dim fntTNR As New Font("Times New Roman", 16, FontStyle.Bold)

Dim fntCSMS As New Font("Comic Sams MS", 14, FontStyle.Italic And FontStyle.Underline)

g.DrawString("Шрифт Courier", fntC, brBlack, 10, 10)

g.DrawString("Шрифт Times New Roman " & " Цей текст весь не потрапить на екран", fntTNR, brRed, New RectangleF(New PointF(10, 40), New SizeF(280, 42)))

g.DrawString("Шрифт Comic Sams MS", fntCSMS, brBlack, New PointF(10, 100))

g.DrawString("Текст", fntCSMS, brBlack, New PointF(10, 130), New StringFormat(StringFormatFlags.DirectionVertical))

End Sub

End Class

 

Малюнок

За допомогою методу DrawImage можна помістити на формі або елементі управління малюнок з файлу:

e.Graphics.DrawImage(Image.FromFile(«с:\закат.jpg»), x, у)

Регулювання кольору

Якщо вас не влаштовує жоден з системних кольорів, можна підібрати потрібний колір, використовуючи властивість FromArgb. Абревіатура Argb розшифровується як alpha, red (червоний), green (зелений), blue (блакитний). Перший параметр позначає прозорість (при нульовому значенні колір повністю прозорий, а при значенні 255 має найбільшу інтенсивність), останні три - кольори, які при змішуванні в потрібній пропорції дають практично будь-який потрібний відтінок, інтенсивність кожного кольору може вимірюватися в розмірі від 0 (найменша інтенсивність) до 255 (найбільша інтенсивність).

Розглянемо конкретний приклад:

Private Sub Form1_Paint(ByVal sender As Object, _

ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

e.Graphics.FillRectangle(New SolidBrush(Color.FromArgb(255, 55, 155, 255)),New Rectangle(50, 50, 150, 150))

End Sub

Побудова графіків функцій

При створенні графіків доводиться враховувати деякі особливості тригонометричних обчислень на комп'ютері, а також способи визначення координат графічних зображень. Це радіанна міра і відповідність абсолютних величин аргументу функції розмірам малюнка в пікселях. Щоб все сказане стало зрозумілішим, пригадаємо що синуси і косинуси вимірюються в десятих і сотих долях одиниці, а це означає, що кількість пікселів, якими визначаються розміри об'єкту, також виражатиметься дуже малим числом. Малюнок, що має такі розміри просто неможливо розгледіти. Тому необхідне збільшення зображення відповідно до заданого масштабу.

Окрім того, необхідно пам'ятати, що початком відліку координат у вікні Windows є лівий верхній кут. При використанні цієї координатної системи буде видно лише частину графіка, яка визначається додатними значеннями абсциси і від’ємними значеннями ординати. Тому необхідно розташовувати графік нижче і правіше, тобто збільшувати значення горизонтальних і вертикальних координат.

Алгоритм побудови графіку полягає в створенні масиву точок, які визначають координати ліній. З великої кількості таких маленьких ліній складатиметься одна велика лінія, що є графіком. Потім ініціюємо цей масив за допомогою циклу.

На перший погляд, все це виглядає не дуже складно. Але насправді складнощів тут немало. Головна складність полягає в підборі співвідношення між значеннями функції, а також її аргументу і реальними значеннями величин вимірюваних в пікселях, по яких будується графік.

Наведемо приклад побудови графіка функції на проміжку (-2;2). Першим кроком є побудова осей координат. Розмістимо початок координат в центрі форми. Для цього потрібно знати ширину w і висоту h форми (визначаються за допомогою властивостей форми Size.Width та Size.Height). Далі будуємо осі координат за допомогою методу DrawLine:

g.DrawLine(New Pen(Color.Black, 3), w \ 2, 0, w \ 2, h)

g.DrawLine(New Pen(Color.Black, 3), 0, h \ 2, w, h \ 2)

Початок координат знаходиться в точці (w\2,h\2).

Далі потрібно побудувати одиничні відрізки на осях координат. Код для осі х виглядає так:

 

Dim x As Integer

Dim x1 As Integer

Dim x2 As Integer

x = 1

Do

x1 = w \ 2 + x * 30

x2 = w \ 2 - x * 30

g.DrawLine(New Pen(Color.Black, 1), x1, h \ 2 - 3, x1, h \ 2 + 3)

g.DrawLine(New Pen(Color.Black, 1), x2, h \ 2 - 3, x2, h \ 2 + 3)

x = x + 1

Loop While (x1 < w) Or (x2 > -w)

Аналогічно будуються одиничні відрізки на осі у.

Число 30 в коді означає, що одиничний відрізок задається довжиною 30 пікселів.

Осі побудовані, тепер переходимо до основної задачі – побудови графіка функції. Наступний код забезпечує поставлену задачу:

Static u As Integer = -2 'ліва межа x на графіку

Static v As Integer = 2 'права межа x на графіку

Dim m As Single

Dim p As Single

' переведення координат на графіку в систему координат форми

m = u * 30 + w \ 2 'ліва межа задана координатою на формі

p = v * 30 + w \ 2 'права межа задана координатою на формі

Dim x1, y1, yx, xx As Single

x1 = m

yx = u * u

y1 = h \ 2 - yx * 30

' (x1,y1) координати першої лівої точки графіка

Dim x2 As Single

Dim y2 As Single ' (x2, y2) наступна точка графіка

Do

x2 = x1 + 1

xx = (x2 - w \ 2) / 30 'проміжні дані для обчислення значення

yx = xx * xx 'функції у звичних нам координатах

y2 = h \ 2 - yx * 30

g.DrawLine(New Pen(Color.Red, 3), x1, y1, x2, y2)

x1 = x2

y1 = y2

Loop While x2 <= p

 

Ось так буде виглядати графік функції:


 




Поделиться с друзьями:


Дата добавления: 2015-05-24; Просмотров: 612; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.073 сек.