Bagikan melalui


Matriks::TransformVectors(Point*,INT) method (gdiplusmatrix.h)

Metode Matriks::TransformVectors mengalikan setiap vektor dalam array dengan matriks ini. Elemen terjemahan matriks ini (baris ketiga) diabaikan. Setiap vektor diperlakukan sebagai matriks baris. Perkalian dilakukan dengan matriks baris di sebelah kiri dan matriks ini di sebelah kanan.

Sintaks

Status TransformVectors(
  [in, out] Point *pts,
  [in]      INT   count
);

Parameter

[in, out] pts

Jenis: Titik*

Penunjuk ke array objek Titik yang, pada input, berisi vektor yang akan diubah dan, pada output, menerima vektor yang diubah. Setiap vektor dalam array diubah (dikalikan dengan matriks ini) dan diperbarui dengan hasil transformasi.

[in] count

Jenis: INT

Pilihan. Bilangan bulat yang menentukan jumlah vektor yang akan diubah. Nilai default adalah 1.

Nilai kembali

Jenis: Status

Jika metode berhasil, metode mengembalikan Ok, yang merupakan elemen dari enumerasi Status .

Jika metode gagal, metode mengembalikan salah satu elemen lain dari enumerasi Status .

Keterangan

Sementara titik mewakili posisi, vektor mewakili entitas (misalnya, kecepatan atau akselerasi) yang memiliki arah dan besaran. Dengan demikian, titik akhir segmen garis adalah titik, tetapi perbedaannya adalah vektor—panjang dan arah segmen garis tersebut.

Vektor mirip dengan titik dalam banyak hal. Seperti poin, mereka diwakili oleh koordinat x- dan y, sehingga GDI + menggunakan kelas yang sama (Titik dan PointF) untuk mewakili vektor seperti yang digunakan untuk mewakili titik. Perbedaan halus antara vektor dan titik adalah cara mereka dipengaruhi oleh transformasi. Di dunia fisik, memindahkan asal sistem koordinat mengubah koordinat semua titik posisi, tetapi tidak akan mengubah vektor kecepatan apa pun. Vektor dapat diskalakan, diputar, dipotong atau dibalik, tetapi tidak diterjemahkan (dipindahkan). Dengan demikian, ketika transformasi affine diterapkan ke vektor, komponen terjemahan (baris terakhir matriks) diabaikan.

Contoh

Contoh berikut membuat vektor dan titik. Ujung vektor dan titik berada di lokasi yang sama: (100, 50). Kode membuat objek Matriks dan menginisialisasi elemennya sehingga mewakili rotasi searah jarang diikuti dengan terjemahan 100 unit di sebelah kanan. Kode memanggil metode Matrix::TransformPoints dari matriks untuk mengubah titik dan memanggil metode Matrix::TransformVectors dari matriks untuk mengubah vektor. Seluruh transformasi (rotasi diikuti dengan terjemahan) dilakukan pada titik, tetapi hanya bagian rotasi dari transformasi yang dilakukan pada vektor. Elemen matriks yang mewakili terjemahan diabaikan oleh metode Matrix::TransformVectors .

VOID Example_TransVectors(HDC hdc)
{
   Graphics graphics(hdc);

   Pen pen(Color(255, 0, 0, 255), 7);
   pen.SetEndCap(LineCapArrowAnchor);
   SolidBrush brush(Color(255, 0, 0, 255));

   // A point and a vector, same representation but different behavior
   Point point(100, 50);
   Point vector(100, 50);

   // Draw the original point and vector in blue.
   graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);

   graphics.DrawLine(&pen, Point(0, 0), vector);

   // Transform.
   Matrix matrix(0.8f, 0.6f, -0.6f, 0.8f, 100.0f, 0.0f);
   matrix.TransformPoints(&point);
   matrix.TransformVectors(&vector);

   // Draw the transformed point and vector in red.
   pen.SetColor(Color(255, 255, 0, 0));
   brush.SetColor(Color(255, 255, 0, 0));
   graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);
   graphics.DrawLine(&pen, Point(0, 0), vector); 
}

Persyaratan

   
Klien minimum yang didukung Windows XP, Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header gdiplusmatrix.h (termasuk Gdiplus.h)
Pustaka Gdiplus.lib
DLL Gdiplus.dll

Lihat juga

Transformasi Global dan Lokal

Matrix

Representasi Transformasi Matriks

Titik

Metode TransformPoints

Metode TransformVectors

Transformasi