Страница: 1 |
|
Вопрос: Не могу справиться с графикой помогите
|
Добавлено: 21.02.08 09:29
|
|
Автор вопроса: Али
|
Не могу справиться с задачей:
Надо начертить любое геометрическое объект по кускам, а именно применяя треугольники. Координаты вершин треугольника задаются заранее...
Ответить
|
Номер ответа: 2 Автор ответа: Георгич
Вопросов: 16 Ответов: 52
|
Профиль | | #2
|
Добавлено: 21.02.08 21:38
|
Действительно только, остаётся гадать, что именно надо, вот тебе программка так сказать для общего развития, может быть, что то , найдешь полезное.
После запуска программы мы увидим многоугольник в виде звезды, если навести мышку на квадратик(вершины многоугольника), нажав левую кнопку мыши и потащить в сторону, то вид многоугольника измениться
Imports System.Math
Public Class Form1
Inherits System.Windows.Forms.Form
" Код, автоматически созданный конструктором форм Windows "
' Переменная, устанавливающее состояние перемещения
' Если равно -1, то перемещать нельзя
Private CheckState As Integer = -1
' Объявляем массив точек
Private apts(9) As Point
' Размеры меток
Private Const iSize As Integer = 6
Private Const iCenter As Integer = iSize \ 2
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Задаем вершины многоугольника
apts(0).X = 80 : apts(0).Y = 20
apts(1).X = 100 : apts(1).Y = 80
apts(2).X = 160 : apts(2).Y = 80
apts(3).X = 120 : apts(3).Y = 120
apts(4).X = 140 : apts(4).Y = 180
apts(5).X = 80 : apts(5).Y = 140
apts(6).X = 20 : apts(6).Y = 180
apts(7).X = 40 : apts(7).Y = 120
apts(8).X = 5 : apts(8).Y = 80
apts(9).X = 60 : apts(9).Y = 80
End Sub
Private Sub CreatePolygon(ByVal g As Graphics)
' Очистим формы от предыдущих линий
g.Clear(BackColor)
' Рисуем многоугольник
g.DrawPolygon(Pens.Red, apts)
' Рисуем метки, за которые можно ухватиться мышкой
 im rectangles() As Rectangle
ReDim rectangles(apts.GetUpperBound(0))
For i As Integer = 0 To apts.GetUpperBound(0)
' Определяем размеры меток и их центры
With rectangles(i)
.X = apts(i).X - iCenter
.Y = apts(i).Y - iCenter
.Width = iSize
.Height = iSize
End With
Next i
' Заполняем метки белым цветом и обрамляем их черным цветом
g.FillRectangles(Brushes.White, rectangles)
g.DrawRectangles(Pens.Black, rectangles)
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
CreatePolygon(e.Graphics)
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
 im dx As Single
 im dy As Single
For i As Integer = 0 To apts.GetUpperBound(0)
If Abs(apts(i).X - e.X) < iCenter And _
Abs(apts(i).Y - e.Y) < iCenter _
Then
' Начинаем тащить
CheckState = i
Exit For
End If
Next i
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
' Ничего не делаем, если нет перемещения
If CheckState = -1 Then Exit Sub
' Перемещаем вершины
apts(CheckState).X = e.X
apts(CheckState).Y = e.Y
' Перерисовываем
CreatePolygon(Me.CreateGraphics())
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
CheckState = -1
End Sub
End Class
Ответить
|
Страница: 1 |
Поиск по форуму