请能帮我将曲线按比例缩小,已有坐标!
请问,怎么把面的这个曲线按比例缩小5倍呀!我自己试了一下,可不不成功!我之前的想法是每个坐标都除于5,但是效果不好!
- VB code
Private Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As LongPrivate Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As LongPrivate Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Type POINTAPI X As Long Y As LongEnd TypePrivate Sub Command1_Click()Dim A(38) As POINTAPIA(0).X = 88: A(0).Y = 335A(1).X = 112: A(1).Y = 312A(2).X = 135: A(2).Y = 290A(3).X = 158: A(3).Y = 270A(4).X = 182: A(4).Y = 250A(5).X = 205: A(5).Y = 232A(6).X = 227: A(6).Y = 215A(7).X = 250: A(7).Y = 200A(8).X = 272: A(8).Y = 186A(9).X = 295: A(9).Y = 173A(10).X = 317: A(10).Y = 161A(11).X = 338: A(11).Y = 150A(12).X = 360: A(12).Y = 141A(13).X = 382: A(13).Y = 132A(14).X = 403: A(14).Y = 125A(15).X = 424: A(15).Y = 119A(16).X = 445: A(16).Y = 114A(17).X = 466: A(17).Y = 111A(18).X = 487: A(18).Y = 108A(19).X = 508: A(19).Y = 107A(20).X = 528: A(20).Y = 106A(21).X = 548: A(21).Y = 107A(22).X = 568: A(22).Y = 109A(23).X = 588: A(23).Y = 112A(24).X = 608: A(24).Y = 116A(25).X = 628: A(25).Y = 121A(26).X = 647: A(26).Y = 127A(27).X = 666: A(27).Y = 135A(28).X = 686: A(28).Y = 143A(29).X = 705: A(29).Y = 152A(30).X = 723: A(30).Y = 163A(31).X = 742: A(31).Y = 174A(32).X = 761: A(32).Y = 187A(33).X = 779: A(33).Y = 200A(34).X = 797: A(34).Y = 215A(35).X = 816: A(35).Y = 230A(36).X = 834: A(36).Y = 246A(37).X = 851: A(37).Y = 264A(38).X = 869: A(38).Y = 282hPen = CreatePen(0, 3, RGB(255, 0, 0))SelectObject Me.hdc, hPenPolyline Me.hdc, A(0), 38 '画三角形End SubPrivate Sub Form_Load() Me.Width = 900 * 15Me.Height = 500 * 15End Sub
[解决办法]
建议改变思路,使用PictureBox对象来绘制
看看这个:
- VB code
Option ExplicitPrivate Type POINTAPI X As Long Y As LongEnd TypeDim A(38) As POINTAPIDim lngTopX As LongDim lngTopY As LongDim lngBottomX As LongDim lngBottomY As Long'原始比例绘制曲线Private Sub Command1_Click() Dim intP As Integer Picture1.AutoRedraw = True Picture1.ScaleMode = vbPixels Picture1.DrawMode = 13 lngTopX = -1 lngTopY = 400 lngBottomX = 900 lngBottomY = -1 Picture1.Scale (lngTopX, lngTopY)-(lngBottomX, lngBottomY) '定义坐标系统 For intP = LBound(A) To UBound(A) - 1 Picture1.Line (A(intP).X, A(intP).Y)-(A(intP + 1).X, A(intP + 1).Y) Next intPEnd Sub'缩小5倍显示Private Sub Command2_Click() Dim intP As Integer Picture1.Cls Picture1.AutoRedraw = True Picture1.ScaleMode = vbPixels Picture1.DrawMode = 13 lngTopX = lngTopX * 5 lngTopY = lngTopY * 5 lngBottomX = lngBottomX * 5 lngBottomY = lngBottomY * 5 Picture1.Scale (lngTopX, lngTopY)-(lngBottomX, lngBottomY) '定义坐标系统 For intP = LBound(A) To UBound(A) - 1 Picture1.Line (A(intP).X, A(intP).Y)-(A(intP + 1).X, A(intP + 1).Y) Next intPEnd Sub'放大5倍显示Private Sub Command3_Click() Dim intP As Integer Picture1.Cls Picture1.AutoRedraw = True Picture1.ScaleMode = vbPixels Picture1.DrawMode = 13 lngTopX = lngTopX / 5 lngTopY = lngTopY / 5 lngBottomX = lngBottomX / 5 lngBottomY = lngBottomY / 5 Picture1.Scale (lngTopX, lngTopY)-(lngBottomX, lngBottomY) '定义坐标系统 For intP = LBound(A) To UBound(A) - 1 Picture1.Line (A(intP).X, A(intP).Y)-(A(intP + 1).X, A(intP + 1).Y) Next intPEnd SubPrivate Sub Form_Load() A(0).X = 88: A(0).Y = 335 A(1).X = 112: A(1).Y = 312 A(2).X = 135: A(2).Y = 290 A(3).X = 158: A(3).Y = 270 A(4).X = 182: A(4).Y = 250 A(5).X = 205: A(5).Y = 232 A(6).X = 227: A(6).Y = 215 A(7).X = 250: A(7).Y = 200 A(8).X = 272: A(8).Y = 186 A(9).X = 295: A(9).Y = 173 A(10).X = 317: A(10).Y = 161 A(11).X = 338: A(11).Y = 150 A(12).X = 360: A(12).Y = 141 A(13).X = 382: A(13).Y = 132 A(14).X = 403: A(14).Y = 125 A(15).X = 424: A(15).Y = 119 A(16).X = 445: A(16).Y = 114 A(17).X = 466: A(17).Y = 111 A(18).X = 487: A(18).Y = 108 A(19).X = 508: A(19).Y = 107 A(20).X = 528: A(20).Y = 106 A(21).X = 548: A(21).Y = 107 A(22).X = 568: A(22).Y = 109 A(23).X = 588: A(23).Y = 112 A(24).X = 608: A(24).Y = 116 A(25).X = 628: A(25).Y = 121 A(26).X = 647: A(26).Y = 127 A(27).X = 666: A(27).Y = 135 A(28).X = 686: A(28).Y = 143 A(29).X = 705: A(29).Y = 152 A(30).X = 723: A(30).Y = 163 A(31).X = 742: A(31).Y = 174 A(32).X = 761: A(32).Y = 187 A(33).X = 779: A(33).Y = 200 A(34).X = 797: A(34).Y = 215 A(35).X = 816: A(35).Y = 230 A(36).X = 834: A(36).Y = 246 A(37).X = 851: A(37).Y = 264 A(38).X = 869: A(38).Y = 282 End Sub
[解决办法]
现在你的坐标默认中心是(0,0), 所以你可以直接把坐标值缩小5倍, 但是曲线距离中心点的距离也缩小了5倍
就是跑到左上角了.
我们假定一个任意中心坐标(A,B).
那么你的初始坐标(X1,Y1)坐标缩小重定位后对应的坐标(X2,Y2)是:
X2= A+(X1-A)/5
Y2= B+(Y2-B)/5
这下会了没? 公式给你了,要是再不会就没话说了.
[解决办法]