2013-12-23 5 views
-1
' details of bitmap 
Dim bm As New Bitmap(1000, 1000) 
Dim graph As Graphics = Graphics.FromImage(bm) 
'when mouse down on pic draw values 
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown 
    Dim rad As Double 
    Dim angle As Integer 
    rad = angle * System.Math.PI/180 
    'equations for rotate lines 

    Dim x As Integer = System.Math.Sin(rad) - System.Math.Cos(rad) 
    Dim y As Integer = System.Math.Sin(rad) + System.Math.Cos(rad) 
    Dim z As Integer = System.Math.Cos(rad) + System.Math.Sin(rad) 

    graph.DrawLine(New Pen(Color.Orange, 1), 150 + e.X, 210 + e.Y, y + 150 - e.X, (x) + 210 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 160 + e.X, 220 + e.Y, (y) + 160 - e.X, (x) + 220 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 170 + e.X, 230 + e.Y, y + 170 - e.X, (x) + 230 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 180 + e.X, 240 + e.Y, (y) + 180 - e.X, (x) + 240 - e.Y) 

    graph.DrawLine(New Pen(Color.Orange, 1), 210 + e.X, 150 + e.Y, y + 210 - e.X, (x) + 150 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 220 + e.X, 160 + e.Y, (y) + 220 - e.X, (x) + 160 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 230 + e.X, 170 + e.Y, y + 230 - e.X, (x) + 170 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 240 + e.X, 180 + e.Y, (y) + 240 - e.X, (x) + 180 - e.Y) 

    graph.DrawLine(New Pen(Color.Green, 1), 210 + e.X, 150 + e.Y, 150 + e.X, 210 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 220 + e.X, 160 + e.Y, 160 + e.X, 220 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 230 + e.X, 170 + e.Y, 170 + e.X, 230 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 240 + e.X, 180 + e.Y, 180 + e.X, 240 + e.Y) 

    graph.DrawLine(New Pen(Color.Green, 1), y + 210 - e.X, (x) + 150 - e.Y, y + 150 - e.X, (x) + 210 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), (y) + 220 - e.X, (x) + 160 - e.Y, (y) + 160 - e.X, (x) + 220 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), y + 230 - e.X, (x) + 170 - e.Y, y + 170 - e.X, (x) + 230 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), (y) + 240 - e.X, (x) + 180 - e.Y, (y) + 180 - e.X, (x) + 240 - e.Y) 

    PictureBox1.Image = bm 
End Sub 

는 마우스 이동 라인을 회전 할 때 여기 내 묻고는 didnt한다 스트레칭 및 그리기 개체 만들고 싶어하고 회전 :여기에서 회전, 이동, 그리기 및 확대/축소가 잘못되었습니다.

Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove 
    PictureBox1.Refresh() 
    Dim graph As Graphics = PictureBox1.CreateGraphics 
    Dim rad As Double 
    Dim angle As Integer 
    rad = angle * System.Math.PI/180 

    Dim x As Integer = System.Math.Sin(rad) - System.Math.Cos(rad) 
    Dim y As Integer = System.Math.Sin(rad) + System.Math.Cos(rad) 
    Dim z As Integer = System.Math.Cos(rad) + System.Math.Sin(rad) 

    graph.DrawLine(New Pen(Color.Green, 1), e.X, e.Y, x + 200 - e.X, (y) + 400 - e.Y) 
    graph.DrawLine(New Pen(Color.Red, 1), e.X, e.Y, (y) + 400 - e.X, (z) + 200 - e.Y) 
    graph.DrawLine(New Pen(Color.Blue, 1), e.X, e.Y, z + 400 + e.X, x + 200 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 150 + e.X, 210 + e.Y, y + 150 - e.X, (x) + 210 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 160 + e.X, 220 + e.Y, (y) + 160 - e.X, (x) + 220 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 170 + e.X, 230 + e.Y, y + 170 - e.X, (x) + 230 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 180 + e.X, 240 + e.Y, (y) + 180 - e.X, (x) + 240 - e.Y) 

    graph.DrawLine(New Pen(Color.Orange, 1), 210 + e.X, 150 + e.Y, y + 210 - e.X, (x) + 150 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 220 + e.X, 160 + e.Y, (y) + 220 - e.X, (x) + 160 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 230 + e.X, 170 + e.Y, y + 230 - e.X, (x) + 170 - e.Y) 
    graph.DrawLine(New Pen(Color.Orange, 1), 240 + e.X, 180 + e.Y, (y) + 240 - e.X, (x) + 180 - e.Y) 

    graph.DrawLine(New Pen(Color.Green, 1), 210 + e.X, 150 + e.Y, 150 + e.X, 210 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 220 + e.X, 160 + e.Y, 160 + e.X, 220 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 230 + e.X, 170 + e.Y, 170 + e.X, 230 + e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), 240 + e.X, 180 + e.Y, 180 + e.X, 240 + e.Y) 

    graph.DrawLine(New Pen(Color.Green, 1), y + 210 - e.X, (x) + 150 - e.Y, y + 150 - e.X, (x) + 210 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), (y) + 220 - e.X, (x) + 160 - e.Y, (y) + 160 - e.X, (x) + 220 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), y + 230 - e.X, (x) + 170 - e.Y, y + 170 - e.X, (x) + 230 - e.Y) 
    graph.DrawLine(New Pen(Color.Green, 1), (y) + 240 - e.X, (x) + 180 - e.Y, (y) + 180 - e.X, (x) + 240 - e.Y) 
End Sub 

enter image description here

+0

나는 VB로 질문 태그가 있지만 그게 맞는지 확실하지 않습니다. 그래서 선택적으로 ['edit the post'] (http://stackoverflow.com/posts/20746140/edit) 적절한 태그를 사용할 수 있습니까? 어쨌든, 당신의 게시물은별로 의미가 없습니다. 세부 사항에서 무엇이 잘못되었는지 설명해야합니다. 기대되는 결과와 실제로 무엇을 보았습니까? 감사! – TLama

+2

@tlama : 네, VB.NET처럼 보입니다. VB.NET의 텍스트 벽. – Neolisk

+0

@Neolisk, phew :-) 나는 형식화를 너무 많이 부수 지 않았 으면 좋겠다. – TLama

답변

1

사본의 방법/코드를 붙여 넣기하는 것은 잘못된 것입니다.

graph.DrawLine(New Pen(Color.Orange, 1), 150 + e.X, 210 + e.Y, y + 150 - e.X, (x) + 210 - e.Y) 
graph.DrawLine(New Pen(Color.Orange, 1), 160 + e.X, 220 + e.Y, (y) + 160 - e.X, (x) + 220 - e.Y) 
graph.DrawLine(New Pen(Color.Orange, 1), 170 + e.X, 230 + e.Y, y + 170 - e.X, (x) + 230 - e.Y) 
graph.DrawLine(New Pen(Color.Orange, 1), 180 + e.X, 240 + e.Y, (y) + 180 - e.X, (x) + 240 - e.Y) 

프로그래밍의 95 %는 코드 읽기에 관한 것입니다. 따라서 코드를 작성할 때 나중에 읽는 시간을 줄이거 나 다른 사람이 읽지 않도록 최대한 작게 작성해야합니다.

코드 # 1의 벽을 보면 모든 시퀀스가 ​​숫자 150 또는 210에서 시작한다는 것을 알 수 있습니다. 그런 다음 +10 단위로 증가합니다. 또한 대괄호 안에 yx을 찍는 것이 중요하지 않습니다. 위의를 사용하여, 코드를 다시 작성할 수 있습니다 :

Sub DrawLines(g As Graphics, color As Color, offsetX As Integer, offsetY As Integer) 
    For i As Integer = 0 to 3 
    Dim leftShift As Integer = offsetX + i*10 
    Dim topShift As Integer = offsetY + i*10 
    g.DrawLine(New Pen(color, 1), 
       leftShift + e.X, topShift + e.Y, 
       y + leftShift - e.X, x + topShift - e.Y)  
    Next 
End Sub 

그런 다음이 4 명 등 4 비슷한 선이 될 : 이제

DrawLines(graph, Color.Orange, 150, 210) 
DrawLines(graph, Color.Orange, 210, 150) 

를, 더 읽기가 아닌가요? 이 두 라인의 문제를 발견하는 것이 다른 8 개 문제보다 쉽지 않습니까? 문제를 파헤 치기 전에 "테이블"에있는 어떤 것도 느려질 수 있습니다. 이 원칙은 DRY입니다. 이 경우 코드 품질로 인해 솔루션을 찾는 속도가 느려집니다. 비슷한 코드 조각 두 개를 볼 때, 우리는 유사점 (자연적으로)을 알아 내려고 노력하고 있습니다. 더 많은 차이점 - 코드를 보는 데 소요되는 시간이 줄어 듭니다. 위와 비슷한 방식으로 리팩터링에 시간을 할애하고 작업이 끝나면 다시 게시하십시오.

+0

나는이 코드를 worte하지만 축 x, y, z는 건강에 좋지 않으므로이 이동하지 않으려 고합니다. 이 코드는하지만 변화를 의미하고 더 많은 이동 모양을 추가하고 메신저 vb.net에서 고급 아니므로 그것을 회전하기 때문에 – ihab

+0

@ user3129855 : 그 코드는 건강에 좋지 않다, 예 ... :) 심각하게, 당신이 무엇인지 명확하지 않다. 거기에 묻습니다. 그래서 나는 너를 올바른 길로 인도하려고 애 썼다. 문제는 물어 보는 법을 알지 못하지만 100 줄의 코드가 있다면, 우리는 아마 당신을 도울 수 없을 것입니다. (너무 많은 정신적 인 긴장이 있고, 그것이 당신이 의미하는 것이 었는지는 알 수 없습니다.) 반면에, 질문하는 법을 모르겠지만 코드가 5 행 밖에없는 경우, 우리는 당신이 가지고있는 코드에서 질문을 추론 할 수 있으며, 우리는 여전히 당신을 도울 것입니다. 스크린 샷을 추가하면 공유 할 항목이있는 경우에도 도움이됩니다. – Neolisk

+0

http://imageshack.us/photo/my-images/843/z886png/ – ihab