теперь мне надо наоборот - с плоскости окна спроецировать точку на path и получить координаты относительно его начала координат (фактически узнать, где сейчас центр окна).
пробовал инвертировать каждую трансформацию и накладывать на определённую точку - не выходит - при вращательных трансформациях съезжает.
пробовал накапливать (multiply) изменения в другой матрице и потом инвертно применять их для точки с экрана - тоже бред какой-то.
подскажите, пжлста, как надо...
вот кусок кода - до мрака черновой...
- Код: Выделить всё
Dim mt As New Matrix
Public Sub Transform(ByVal mat As Matrix)
'm_ctr_grid.Offset(CInt(mat.OffsetX), CInt(mat.OffsetY))
'Debug.WriteLine(m_ctr_grid.X.ToString + ";" + m_ctr_grid.Y.ToString + " " + mt.OffsetX.ToString + ";" + mt.OffsetY.ToString + " " + (arr(m_rng \ 2, m_rng \ 2).Corner.X + m_side_pxl \ 2).ToString + " " + rrr(0).X.ToString)
m_grid_path.Transform(mat)
'mat.Invert()
mt.Multiply(mat)
mat.TransformPoints(m_ctr_grid)
'mat.VectorTransformPoints(m_ctr_grid)
End Sub
Dim fnt As New Font("Courier New", 10)
Public Sub Paint(ByVal G As Graphics)
G.DrawPath(Pens.Blue, m_grid_path)
G.DrawEllipse(Pens.Red, m_ctr_grid(0).X, m_ctr_grid(0).Y, m_ctr_rad, m_ctr_rad)
Dim foo() As Point
ReDim foo(0)
Dim mtt As New Matrix
mtt.Multiply(mt)
mtt.Invert()
mtt.TransformPoints(foo)
Dim coor_x, coor_y As Single
coor_x = foo(0).X ' m_ctr_grid(0).X 'm_field_size.Width \ 2 -
coor_y = foo(0).Y ' m_ctr_grid(0).Y 'm_field_size.Height \ 2 -
G.DrawString(coor_x.ToString + ";" + coor_y.ToString, fnt, Brushes.Brown, m_field_size.Width \ 2, m_field_size.Height \ 2)
G.DrawEllipse(Pens.Brown, m_field_size.Width \ 2, m_field_size.Height \ 2, m_ctr_rad, m_ctr_rad)
End Sub