怎样开通法兰克系统坐标系旋转无法
旋转坐标系建议使用复平面或者极坐标,把(x,y)形式的坐标转换成(a+bi)或者(m,arg)(模长,幅角)的形式,简单的旋转极坐标就可以了,比较复杂的翻转可以用复平面,假想y轴是虚轴,自己定义一些复数运算来解决。
下面是直角坐标和极坐标混用的一个例子(自己乱写的),按一下按钮图形逆时针旋转30度
窗体上放一个按钮,一个PictureBox,输入以下代码:
Dim pi As Double
Dim x(3) As Double, y(3) As Double
Private Sub Command1_Click()
Dim theta As Double
Dim ttx As Doub...全部
旋转坐标系建议使用复平面或者极坐标,把(x,y)形式的坐标转换成(a+bi)或者(m,arg)(模长,幅角)的形式,简单的旋转极坐标就可以了,比较复杂的翻转可以用复平面,假想y轴是虚轴,自己定义一些复数运算来解决。
下面是直角坐标和极坐标混用的一个例子(自己乱写的),按一下按钮图形逆时针旋转30度
窗体上放一个按钮,一个PictureBox,输入以下代码:
Dim pi As Double
Dim x(3) As Double, y(3) As Double
Private Sub Command1_Click()
Dim theta As Double
Dim ttx As Double, tty As Double
theta = pi / 6
For i = 0 To 3
ttx = m(x(i), y(i)) * Cos(theta + arg(x(i), y(i)))
tty = m(x(i), y(i)) * Sin(theta + arg(x(i), y(i)))
x(i) = ttx
y(i) = tty
Next
drawA
End Sub
Private Sub Form_Load()
pi = 4 * Atn(1)
Picture1。
ScaleMode = 3
Picture1。Scale (-Picture1。ScaleWidth * 1 / 2, Picture1。ScaleHeight * 1 / 2)-(Picture1。
ScaleWidth * 1 / 2, -Picture1。ScaleHeight * 1 / 2)
x(0) = 10
x(1) = 26
x(2) = 48
x(3) = 34
y(0) = 16
y(1) = 43
y(2) = 22
y(3) = 10
Picture1。
AutoRedraw = True
tx = 100
ty = 0
Call drawA
End Sub
Sub drawA()
Picture1。Line (-100, 0)-(100, 0)
Picture1。
Line (0, 100)-(0, -100)
For i = 0 To 2
Picture1。Line (x(i), y(i))-(x(i + 1), y(i + 1))
Next
Picture1。
Line (x(3), y(3))-(x(0), y(0))
End Sub
Function m(ByVal x As Double, ByVal y As Double) As Double
m = Sqr(x ^ 2 + y ^ 2)
End Function
Function arg(ByVal x As Double, ByVal y As Double)
If x = 0 Then
If y = 0 Then arg = 0: Exit Function
If y > 0 Then arg = pi / 2: Exit Function
arg = 3 * pi / 2: Exit Function
ElseIf x > 0 Then
If y > 0 Then arg = Atn(y / x): Exit Function
If y = 0 Then arg = 0: Exit Function
arg = 2 * pi - Atn(-y / x): Exit Function
Else
If y > 0 Then arg = pi - Atn(-y / x): Exit Function
If y = 0 Then arg = pi: Exit Function
arg = pi + Atn(y / x)
End If
End Function
相当于坐标顺时针旋转坐标轴。
收起