2013-12-23 37 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 

当鼠标移动旋转线,但在这里我问想让它没有舒展和绘图对象和旋转:旋转,移动,绘制和缩放这里有什么不对?

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,但我不确定这是否正确。那么你可以选择[编辑帖子](http://stackoverflow.com/posts/20746140/edit)并使用适当的标签吗?无论如何,你的帖子没有多大意义。你应该描述细节上的错误。预期结果和实际看到的是什么?谢谢! – TLama

+2

@TLama:是的,看起来像VB.NET。 VB.NET中的一段文字。 – Neolisk

+0

@Neilisk,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不健康,所以我想移动这个shap没有worng在这段代码,但我的意思是改变和添加更多的移动shap和旋转它,因为我不在vb.net高级 – ihab

+0

@ user3129855:该代码是不利于健康,是的...... :)虽然,严重但不清楚你是什么在那里问。所以我只是想让你走在正确的道路上。问题是,如果你不知道如何提问,并且你有100行代码,我们可能无法帮助你(太多的精神压力,我们不知道这是否意味着什么)。另一方面,如果您不知道如何提问,但只有5行代码,我们有时可以从您拥有的代码中推断出问题,并且我们仍会帮助您。如果你有一些分享,添加屏幕截图也会有所帮助。 – Neolisk

+0

http://imageshack.us/photo/my-images/843/z886。png/ – ihab