# Nakafa Framework: LLM

URL: /id/subject/high-school/12/mathematics/function-transformation/rotation
Source: https://raw.githubusercontent.com/nakafaai/nakafa.com/refs/heads/main/packages/contents/subject/high-school/12/mathematics/function-transformation/rotation/id.mdx

Output docs content for large language models.

---

export const metadata = {
  title: "Rotasi",
  description: "Kuasai rotasi fungsi terhadap titik tetap dengan contoh langkah demi langkah. Pelajari rumus rotasi, sudut, dan transformasi untuk berbagai jenis fungsi.",
  authors: [{ name: "Nabil Akbarazzima Fatih" }],
  date: "05/26/2025",
  subject: "Transformasi Fungsi",
};

import { getColor } from "@repo/design-system/lib/color";
import { LineEquation } from "@repo/design-system/components/contents/line-equation";

## Pengertian Rotasi Fungsi

Rotasi adalah transformasi geometri yang memutar suatu objek terhadap titik pusat tertentu dengan sudut rotasi yang ditentukan. Dalam konteks fungsi, rotasi mengubah posisi grafik fungsi dengan cara memutar setiap titik pada grafik tersebut.

Bayangkan seperti memutar sebuah roda. Setiap titik pada roda akan bergerak mengikuti lingkaran dengan pusat rotasi sebagai pusatnya. Begitu juga dengan grafik fungsi, setiap titik akan berputar mengikuti pola yang sama.

## Rumus Rotasi Terhadap Titik Pusat

Untuk rotasi terhadap titik pusat <InlineMath math="(a, b)" /> dengan sudut <InlineMath math="\theta" />, rumus transformasinya adalah:

<div className="flex flex-col gap-4">
<BlockMath math="x' = (x - a) \cos \theta - (y - b) \sin \theta + a" />
<BlockMath math="y' = (x - a) \sin \theta + (y - b) \cos \theta + b" />
</div>

Dimana:
- <InlineMath math="(x, y)" /> adalah koordinat titik asal
- <InlineMath math="(x', y')" /> adalah koordinat titik hasil rotasi
- <InlineMath math="(a, b)" /> adalah titik pusat rotasi
- <InlineMath math="\theta" /> adalah sudut rotasi (positif untuk arah berlawanan jarum jam)

## Rotasi Khusus Terhadap Titik Asal

Ketika rotasi dilakukan terhadap titik asal <InlineMath math="(0, 0)" />, rumus menjadi lebih sederhana:

1. Rotasi 90 Derajat

    <BlockMath math="(x, y) \rightarrow (-y, x)" />

2. Rotasi 180 Derajat

    <BlockMath math="(x, y) \rightarrow (-x, -y)" />

3. Rotasi 270 Derajat

    <BlockMath math="(x, y) \rightarrow (y, -x)" />

## Visualisasi Rotasi Fungsi Kuadrat

Mari kita lihat bagaimana rotasi mempengaruhi fungsi kuadrat <InlineMath math="y = x^2" />:

<LineEquation
  title={<>Rotasi Fungsi <InlineMath math="y = x^2" /> Terhadap Titik Asal</>}
  description="Perbandingan fungsi asli dengan hasil rotasi 90° berlawanan arah jarum jam."
  data={[
    {
      points: Array.from({ length: 21 }, (_, i) => {
        const x = (i - 10) * 0.5;
        const y = x * x * 0.25;
        return { x, y, z: 0 };
      }),
      color: getColor("PURPLE"),
      showPoints: false,
      labels: [
        {
          text: "y = x²",
          at: 15,
          offset: [0.5, 0.5, 0],
        },
      ],
    },
    {
      points: Array.from({ length: 21 }, (_, i) => {
        const x = (i - 10) * 0.5;
        const y = x * x * 0.25;
        // Rotasi 90° terhadap titik asal: (x,y) → (-y,x)
        const xRotated = -y;
        const yRotated = x;
        return { x: xRotated, y: yRotated, z: 0 };
      }),
      color: getColor("ORANGE"),
      showPoints: false,
      labels: [
        {
          text: "Hasil Rotasi 90°",
          at: 5,
          offset: [-1, 0.5, 0],
        },
      ],
    },
  ]}
/>

## Sifat Rotasi Fungsi

Rotasi memiliki beberapa sifat penting:

- **Mempertahankan Bentuk**: Rotasi tidak mengubah bentuk dasar grafik, hanya mengubah orientasinya
- **Mempertahankan Jarak**: Jarak antara dua titik pada grafik tetap sama setelah rotasi
- **Komposisi Rotasi**: Rotasi berturut-turut dapat digabungkan dengan menjumlahkan sudut rotasinya

## Penerapan Rotasi pada Berbagai Fungsi

### Rotasi Fungsi Linear

Untuk fungsi linear <InlineMath math="y = mx + c" />, rotasi akan mengubah kemiringan dan posisi garis.

<LineEquation
  title={<>Rotasi Fungsi Linear <InlineMath math="y = 2x + 1" /></>}
  description="Rotasi 45° terhadap titik asal."
  data={[
    {
      points: Array.from({ length: 11 }, (_, i) => {
        const x = (i - 5);
        const y = 2 * x + 1;
        return { x, y, z: 0 };
      }),
      color: getColor("TEAL"),
      showPoints: false,
      labels: [
        {
          text: "y = 2x + 1",
          at: 6,
          offset: [1, 0.5, 0],
        },
      ],
    },
    {
      points: Array.from({ length: 11 }, (_, i) => {
        const x = (i - 5);
        const y = 2 * x + 1;
        // Rotasi 45° terhadap titik asal
        const cos45 = Math.cos(Math.PI / 4);
        const sin45 = Math.sin(Math.PI / 4);
        const xRotated = x * cos45 - y * sin45;
        const yRotated = x * sin45 + y * cos45;
        return { x: xRotated, y: yRotated, z: 0 };
      }),
      color: getColor("VIOLET"),
      showPoints: false,
      labels: [
        {
          text: "Rotasi 45°",
          at: 6,
          offset: [-0.5, 0.5, 0],
        },
      ],
    },
  ]}
/>

### Rotasi Fungsi Eksponensial

Rotasi juga dapat diterapkan pada fungsi eksponensial dengan hasil yang menarik.

<LineEquation
  title={<>Rotasi Fungsi <InlineMath math="y = 2^x" /></>}
  description="Rotasi 90° berlawanan arah jarum jam."
  cameraPosition={[8, 6, 8]}
  data={[
    {
      points: Array.from({ length: 15 }, (_, i) => {
        const x = (i - 7) * 0.5;
        const y = Math.pow(2, x * 0.5);
        return { x, y, z: 0 };
      }),
      color: getColor("EMERALD"),
      showPoints: false,
      labels: [
        {
          text: "y = 2^x",
          at: 12,
          offset: [0.5, 0.5, 0],
        },
      ],
    },
    {
      points: Array.from({ length: 15 }, (_, i) => {
        const x = (i - 7) * 0.5;
        const y = Math.pow(2, x * 0.5);
        // Rotasi 90° terhadap titik asal: (x,y) → (-y,x)
        const xRotated = -y;
        const yRotated = x;
        return { x: xRotated, y: yRotated, z: 0 };
      }),
      color: getColor("AMBER"),
      showPoints: false,
      labels: [
        {
          text: "Rotasi 90°",
          at: 3,
          offset: [-0.5, 0.5, 0],
        },
      ],
    },
  ]}
/>

## Langkah Menentukan Hasil Rotasi

Untuk menentukan hasil rotasi suatu fungsi, ikuti langkah berikut:

- Tentukan titik pusat rotasi dan sudut rotasi yang diinginkan
- Pilih beberapa titik pada grafik fungsi asli sebagai sampel
- Terapkan rumus rotasi pada setiap titik sampel
- Hubungkan titik hasil rotasi untuk membentuk grafik fungsi baru
- Verifikasi hasil dengan memeriksa beberapa titik tambahan

## Latihan

1. Tentukan hasil rotasi titik <InlineMath math="(3, 4)" /> terhadap titik asal dengan sudut 90° berlawanan arah jarum jam.

2. Fungsi <InlineMath math="f(x) = x^2 - 2x + 1" /> dirotasi 180° terhadap titik asal. Tentukan koordinat titik puncak hasil rotasi jika titik puncak asli berada di <InlineMath math="(1, 0)" />.

3. Garis <InlineMath math="y = 3x - 2" /> dirotasi 270° terhadap titik asal. Tentukan persamaan garis hasil rotasi.

4. Titik <InlineMath math="(2, 5)" /> dirotasi 60° terhadap titik <InlineMath math="(1, 1)" />. Tentukan koordinat hasil rotasi.

5. Fungsi <InlineMath math="y = \sqrt{x}" /> untuk <InlineMath math="x \geq 0" /> dirotasi 90° berlawanan arah jarum jam terhadap titik asal. Jelaskan bentuk grafik hasil rotasi.

### Kunci Jawaban

1. Menggunakan rumus rotasi 90°:
   
   <div className="flex flex-col gap-4">
   <BlockMath math="(x, y) \rightarrow (-y, x)" />
   <BlockMath math="(3, 4) \rightarrow (-4, 3)" />
   </div>
   
   Jadi hasil rotasi adalah <InlineMath math="(-4, 3)" />.

   <LineEquation
     title="Visualisasi Rotasi Titik (3, 4)"
     description="Rotasi 90° berlawanan arah jarum jam terhadap titik asal."
     cameraPosition={[8, 6, 8]}
     data={[
       {
         points: [
           { x: 0, y: 0, z: 0 },
           { x: 3, y: 4, z: 0 }
         ],
         color: getColor("PURPLE"),
         showPoints: false,
         labels: [
           {
             text: "(3, 4)",
             at: 1,
             offset: [0.3, 0.3, 0],
           },
         ],
         cone: { position: "end", size: 0.3 }
       },
       {
         points: [
           { x: 0, y: 0, z: 0 },
           { x: -4, y: 3, z: 0 }
         ],
         color: getColor("ORANGE"),
         showPoints: false,
         labels: [
           {
             text: "(-4, 3)",
             at: 1,
             offset: [-0.5, 0.3, 0],
           },
         ],
         cone: { position: "end", size: 0.3 }
       },
     ]}
   />

2. Titik puncak asli dirotasi 180°:
   
   <div className="flex flex-col gap-4">
   <BlockMath math="(x, y) \rightarrow (-x, -y)" />
   <BlockMath math="(1, 0) \rightarrow (-1, 0)" />
   </div>
   
   Koordinat titik puncak hasil rotasi adalah <InlineMath math="(-1, 0)" />.

   <LineEquation
     title={<>Rotasi Fungsi <InlineMath math="f(x) = x^2 - 2x + 1" /></>}
     description="Rotasi 180° terhadap titik asal."
     cameraPosition={[10, 6, 10]}
     data={[
       {
         points: Array.from({ length: 21 }, (_, i) => {
           const x = (i - 10) * 0.3;
           const y = x * x - 2 * x + 1;
           return { x, y, z: 0 };
         }),
         color: getColor("TEAL"),
         showPoints: false,
         labels: [
           {
             text: "f(x) = x² - 2x + 1",
             at: 18,
             offset: [1, 0.5, 0],
           },
         ],
       },
       {
         points: Array.from({ length: 21 }, (_, i) => {
           const x = (i - 10) * 0.3;
           const y = x * x - 2 * x + 1;
           // Rotasi 180°: (x,y) → (-x,-y)
           const xRotated = -x;
           const yRotated = -y;
           return { x: xRotated, y: yRotated, z: 0 };
         }),
         color: getColor("VIOLET"),
         showPoints: false,
         labels: [
           {
             text: "Hasil Rotasi 180°",
             at: 8,
             offset: [-0.5, -0.5, 0],
           },
         ],
       },
     ]}
   />

3. Ambil dua titik pada garis dan rotasi 270°:
   
   <div className="flex flex-col gap-4">
   <BlockMath math="(x, y) \rightarrow (y, -x)" />
   <BlockMath math="(0, -2) \rightarrow (-2, 0)" />
   <BlockMath math="(1, 1) \rightarrow (1, -1)" />
   <BlockMath math="m = \frac{-1 - 0}{1 - (-2)} = \frac{-1}{3}" />
   <BlockMath math="y = -\frac{1}{3}x - \frac{2}{3}" />
   </div>

   Maka persamaan garis hasil rotasi adalah <InlineMath math="y = -\frac{1}{3}x - \frac{2}{3}" />.

   <LineEquation
     title={<>Rotasi Garis <InlineMath math="y = 3x - 2" /></>}
     description="Rotasi 270° terhadap titik asal."
     cameraPosition={[8, 6, 8]}
     data={[
       {
         points: Array.from({ length: 11 }, (_, i) => {
           const x = (i - 5) * 0.8;
           const y = 3 * x - 2;
           return { x, y, z: 0 };
         }),
         color: getColor("EMERALD"),
         showPoints: false,
         labels: [
           {
             text: "y = 3x - 2",
             at: 6,
             offset: [2, 0.5, 0],
           },
         ],
       },
       {
         points: Array.from({ length: 11 }, (_, i) => {
           const x = (i - 5) * 0.8;
           const y = 3 * x - 2;
           // Rotasi 270°: (x,y) → (y,-x)
           const xRotated = y;
           const yRotated = -x;
           return { x: xRotated, y: yRotated, z: 0 };
         }),
         color: getColor("AMBER"),
         showPoints: false,
         labels: [
           {
             text: "y = -⅓x - ⅔",
             at: 5,
             offset: [-0.5, 1.5, 0],
           },
         ],
       },
     ]}
   />

4. Menggunakan rumus rotasi terhadap titik dengan sudut 60°:
   
   <div className="flex flex-col gap-4">
   <BlockMath math="x' = (x-a) \cos \theta - (y-b) \sin \theta + a" />
   <BlockMath math="y' = (x-a) \sin \theta + (y-b) \cos \theta + b" />
   <BlockMath math="x' = (2-1) \cdot \frac{1}{2} - (5-1) \cdot \frac{\sqrt{3}}{2} + 1" />
   <BlockMath math="x' = \frac{3}{2} - 2\sqrt{3}" />
   <BlockMath math="y' = (2-1) \cdot \frac{\sqrt{3}}{2} + (5-1) \cdot \frac{1}{2} + 1" />
   <BlockMath math="y' = 3 + \frac{\sqrt{3}}{2}" />
   </div>
   
   Koordinat hasil rotasi: <InlineMath math="(\frac{3}{2} - 2\sqrt{3}, 3 + \frac{\sqrt{3}}{2})" />

   <LineEquation
     title="Rotasi Titik (2, 5) Terhadap Titik (1, 1)"
     description="Rotasi 60° berlawanan arah jarum jam."
     cameraPosition={[8, 6, 8]}
     data={[
       {
         points: [
           { x: 1, y: 1, z: 0 },
           { x: 2, y: 5, z: 0 }
         ],
         color: getColor("CYAN"),
         showPoints: false,
         labels: [
           {
             text: "(2, 5)",
             at: 1,
             offset: [0.3, 0.3, 0],
           },
           {
             text: "Pusat (1, 1)",
             at: 0,
             offset: [0.3, -0.3, 0],
           },
         ],
         cone: { position: "end", size: 0.3 }
       },
       {
         points: [
           { x: 1, y: 1, z: 0 },
           { x: 1.5 - 2 * Math.sqrt(3), y: 3 + Math.sqrt(3) / 2, z: 0 }
         ],
         color: getColor("PINK"),
         showPoints: false,
         labels: [
           {
             text: "Hasil Rotasi",
             at: 1,
             offset: [-0.5, 0.3, 0],
           },
         ],
         cone: { position: "end", size: 0.3 }
       },
     ]}
   />

5. Fungsi <InlineMath math="y = \sqrt{x}" /> dirotasi 90° menjadi:
   
   <div className="flex flex-col gap-4">
   <BlockMath math="x = -\sqrt{y}" />
   <BlockMath math="y = x^2 \text{ untuk } x \leq 0" />
   </div>
   
   Grafik hasil rotasi berbentuk parabola yang terbuka ke atas dengan domain <InlineMath math="x \leq 0" /> dan range <InlineMath math="y \geq 0" />. Ini adalah refleksi dari parabola <InlineMath math="y = x^2" /> terhadap sumbu y.

   <LineEquation
     title={<>Rotasi Fungsi <InlineMath math="y = \sqrt{x}" /></>}
     description="Rotasi 90° berlawanan arah jarum jam terhadap titik asal."
     cameraPosition={[8, 6, 8]}
     data={[
       {
         points: Array.from({ length: 21 }, (_, i) => {
           const x = i * 0.25;
           const y = Math.sqrt(x);
           return { x, y, z: 0 };
         }),
         color: getColor("LIME"),
         showPoints: false,
         labels: [
           {
             text: "y = √x",
             at: 15,
             offset: [0.5, 0.3, 0],
           },
         ],
       },
       {
         points: Array.from({ length: 21 }, (_, i) => {
           const x = i * 0.25;
           const y = Math.sqrt(x);
           // Rotasi 90°: (x,y) → (-y,x)
           const xRotated = -y;
           const yRotated = x;
           return { x: xRotated, y: yRotated, z: 0 };
         }),
         color: getColor("ROSE"),
         showPoints: false,
         labels: [
           {
             text: "y = x² (x ≤ 0)",
             at: 15,
             offset: [-0.8, 0.3, 0],
           },
         ],
       },
     ]}
   />