# Nakafa Framework: LLM URL: /id/subject/high-school/11/mathematics/circle/external-tangent-line-and-internal-tangent-line Source: https://raw.githubusercontent.com/nakafaai/nakafa.com/refs/heads/main/packages/contents/subject/high-school/11/mathematics/circle/external-tangent-line-and-internal-tangent-line/id.mdx Output docs content for large language models. --- import { getColor } from "@repo/design-system/lib/color"; import { LineEquation } from "@repo/design-system/components/contents/line-equation"; export const metadata = { title: "Garis Singgung Persekutuan Luar dan Dalam", description: "Kuasai garis singgung persekutuan luar dan dalam antar lingkaran. Pelajari rumus, perhitungan, dan selesaikan soal kompleks dengan contoh lengkap.", authors: [{ name: "Nabil Akbarazzima Fatih" }], date: "05/18/2025", subject: "Lingkaran", }; ## Pengertian Garis Singgung Persekutuan Garis singgung persekutuan adalah garis yang menyinggung dua lingkaran sekaligus. Terdapat dua jenis garis singgung persekutuan: 1. **Garis Singgung Persekutuan Luar**: Garis yang menyinggung kedua lingkaran dari sisi yang sama 2. **Garis Singgung Persekutuan Dalam**: Garis yang menyinggung kedua lingkaran dari sisi yang berlawanan ## Konsep Garis Singgung Persekutuan Luar Garis singgung persekutuan luar adalah garis yang menyinggung kedua lingkaran dan tidak memotong garis yang menghubungkan kedua pusat lingkaran. { const angle = (i * Math.PI) / 180; return { x: -4 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 4 + 3 * Math.cos(angle), y: 3 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -4, y: 0, z: 0 }, { x: 4, y: 0, z: 0 }, ], color: getColor("ORANGE"), showPoints: true, labels: [ { text: "A", at: 0, offset: [-0.5, -0.5, 0] }, { text: "B", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: (() => { const O1 = { x: -4, y: 0 }; const O2 = { x: 4, y: 0 }; const r1 = 2; const r2 = 3; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // First tangent line (upper) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux + cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy + cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux + cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy + cos_alpha * vy); // Extend the line const tdx = T2x - T1x; const tdy = T2y - T1y; const tlen = Math.sqrt(tdx * tdx + tdy * tdy); const tux = tdx / tlen; const tuy = tdy / tlen; return [ { x: T1x - 4 * tux, y: T1y - 4 * tuy, z: 0 }, { x: T2x + 4 * tux, y: T2y + 4 * tuy, z: 0 }, ]; })(), color: getColor("CYAN"), showPoints: false, labels: [{ text: "g₁", at: 1, offset: [0, 0.5, 0] }], }, { points: (() => { const O1 = { x: -4, y: 0 }; const O2 = { x: 4, y: 0 }; const r1 = 2; const r2 = 3; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // Second tangent line (lower) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux - cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy - cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux - cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy - cos_alpha * vy); // Extend the line const tdx = T2x - T1x; const tdy = T2y - T1y; const tlen = Math.sqrt(tdx * tdx + tdy * tdy); const tux = tdx / tlen; const tuy = tdy / tlen; return [ { x: T1x - 4 * tux, y: T1y - 4 * tuy, z: 0 }, { x: T2x + 4 * tux, y: T2y + 4 * tuy, z: 0 }, ]; })(), color: getColor("TEAL"), showPoints: false, labels: [{ text: "g₂", at: 1, offset: [0, -0.5, 0] }], }, ]} cameraPosition={[0, 0, 15]} showZAxis={false} /> ### Rumus Panjang Garis Singgung Persekutuan Luar Untuk dua lingkaran dengan: - Pusat lingkaran pertama: - Pusat lingkaran kedua: - Jari-jari lingkaran pertama: - Jari-jari lingkaran kedua: - Jarak antara pusat: Panjang garis singgung persekutuan luar: ### Mencari Panjang Garis Singgung Persekutuan Luar Dua lingkaran masing-masing berpusat di dengan jari-jari 1.5 dan dengan jari-jari 2.5. Tentukan panjang garis singgung persekutuan luar! Lingkaran dengan dan{" "} } description="Visualisasi garis singgung persekutuan luar." data={[ { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: -3 + 1.5 * Math.cos(angle), y: 1.5 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 3 + 2.5 * Math.cos(angle), y: 2.5 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -3, y: 0, z: 0 }, { x: 3, y: 0, z: 0 }, ], color: getColor("ORANGE"), showPoints: true, labels: [ { text: "A", at: 0, offset: [-0.5, -0.5, 0] }, { text: "B", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: (() => { const O1 = { x: -3, y: 0 }; const O2 = { x: 3, y: 0 }; const r1 = 1.5; const r2 = 2.5; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // First tangent line (upper) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux + cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy + cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux + cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy + cos_alpha * vy); return [ // hard code little bit to make it look better { x: T1x - 0.25, y: T1y, z: 0 }, { x: T2x - 0.45, y: T2y, z: 0 }, ]; })(), color: getColor("CYAN"), showPoints: true, labels: [ { text: "P", at: 0, offset: [-0.5, 0.5, 0] }, { text: "Q", at: 1, offset: [0.5, 0.5, 0] }, ], }, { points: (() => { const O1 = { x: -3, y: 0 }; const O2 = { x: 3, y: 0 }; const r1 = 1.5; const r2 = 2.5; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // Second tangent line (lower) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux - cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy - cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux - cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy - cos_alpha * vy); return [ // hard code little bit to make it look better { x: T1x - 0.25, y: T1y, z: 0 }, { x: T2x - 0.45, y: T2y, z: 0 }, ]; })(), color: getColor("TEAL"), showPoints: true, labels: [ { text: "R", at: 0, offset: [-0.5, -0.5, 0] }, { text: "S", at: 1, offset: [0.5, -0.5, 0] }, ], }, ]} cameraPosition={[0, 0, 12]} showZAxis={false} /> **Penyelesaian:**
Jadi, panjang garis singgung persekutuan luar adalah satuan. ## Konsep Garis Singgung Persekutuan Dalam Garis singgung persekutuan dalam adalah garis yang menyinggung kedua lingkaran dari sisi yang berlawanan dan memotong garis yang menghubungkan kedua pusat lingkaran. { const angle = (i * Math.PI) / 180; return { x: -4 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 4 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -4, y: 0, z: 0 }, { x: 4, y: 0, z: 0 }, ], color: getColor("ORANGE"), showPoints: true, labels: [ { text: "A", at: 0, offset: [-0.5, -0.5, 0] }, { text: "B", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: (() => { const O1 = { x: -4, y: 0 }; const O2 = { x: 4, y: 0 }; const r1 = 2; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta + Math.PI / 2 - alpha); const T1y = O1.y + r1 * Math.sin(theta + Math.PI / 2 - alpha); const T2x = O2.x + r2 * Math.cos(theta + Math.PI / 2 - alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta + Math.PI / 2 - alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 3 * ux, y: T1y - 3 * uy, z: 0 }, { x: T2x + 3 * ux, y: T2y + 3 * uy, z: 0 }, ]; })(), color: getColor("PINK"), showPoints: false, labels: [{ text: "h₁", at: 0, offset: [-1, 0.5, 0] }], }, { points: (() => { const O1 = { x: -4, y: 0 }; const O2 = { x: 4, y: 0 }; const r1 = 2; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta - Math.PI / 2 + alpha); const T1y = O1.y + r1 * Math.sin(theta - Math.PI / 2 + alpha); const T2x = O2.x + r2 * Math.cos(theta - Math.PI / 2 + alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta - Math.PI / 2 + alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 3 * ux, y: T1y - 3 * uy, z: 0 }, { x: T2x + 3 * ux, y: T2y + 3 * uy, z: 0 }, ]; })(), color: getColor("AMBER"), showPoints: false, labels: [{ text: "h₂", at: 0, offset: [-1, -0.5, 0] }], }, ]} cameraPosition={[0, 0, 15]} showZAxis={false} /> ### Rumus Panjang Garis Singgung Persekutuan Dalam Panjang garis singgung persekutuan dalam: **Syarat:** Garis singgung persekutuan dalam hanya ada jika (kedua lingkaran tidak berpotongan). ### Mencari Panjang Garis Singgung Persekutuan Dalam Dua lingkaran masing-masing berpusat di dengan jari-jari 2 dan dengan jari-jari 3. Tentukan panjang garis singgung persekutuan dalam! Lingkaran dengan dan{" "} } description="Visualisasi garis singgung persekutuan dalam." data={[ { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: -5 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 5 + 3 * Math.cos(angle), y: 3 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -5, y: 0, z: 0 }, { x: 5, y: 0, z: 0 }, ], color: getColor("ORANGE"), showPoints: true, labels: [ { text: "P", at: 0, offset: [-0.5, -0.5, 0] }, { text: "Q", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: (() => { const O1 = { x: -5, y: 0 }; const O2 = { x: 5, y: 0 }; const r1 = 2; const r2 = 3; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta + Math.PI / 2 - alpha); const T1y = O1.y + r1 * Math.sin(theta + Math.PI / 2 - alpha); const T2x = O2.x + r2 * Math.cos(theta + Math.PI / 2 - alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta + Math.PI / 2 - alpha + Math.PI); return [ { x: T1x, y: T1y, z: 0 }, { x: T2x, y: T2y, z: 0 }, ]; })(), color: getColor("PINK"), showPoints: true, labels: [ { text: "E", at: 0, offset: [-0.5, 0.5, 0] }, { text: "F", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: (() => { const O1 = { x: -5, y: 0 }; const O2 = { x: 5, y: 0 }; const r1 = 2; const r2 = 3; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta - Math.PI / 2 + alpha); const T1y = O1.y + r1 * Math.sin(theta - Math.PI / 2 + alpha); const T2x = O2.x + r2 * Math.cos(theta - Math.PI / 2 + alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta - Math.PI / 2 + alpha + Math.PI); return [ { x: T1x, y: T1y, z: 0 }, { x: T2x, y: T2y, z: 0 }, ]; })(), color: getColor("AMBER"), showPoints: true, labels: [ { text: "G", at: 0, offset: [-0.5, -0.5, 0] }, { text: "H", at: 1, offset: [0.5, 0.5, 0] }, ], }, ]} cameraPosition={[0, 0, 18]} showZAxis={false} /> **Penyelesaian:** Pertama, periksa apakah garis singgung persekutuan dalam ada:
Karena syarat terpenuhi, maka:
Jadi, panjang garis singgung persekutuan dalam adalah satuan. ## Lingkaran dengan Jari-jari Sama Ketika dua lingkaran memiliki jari-jari yang sama (), terdapat sifat khusus: ### Garis Singgung Persekutuan Luar { const angle = (i * Math.PI) / 180; return { x: -3 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 3 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -3, y: 0, z: 0 }, { x: 3, y: 0, z: 0 }, ], color: getColor("ORANGE"), showPoints: true, labels: [ { text: "O₁", at: 0, offset: [-0.5, -0.5, 0] }, { text: "O₂", at: 1, offset: [0.5, -0.5, 0] }, ], }, { points: [ { x: -3, y: 2, z: 0 }, { x: 3, y: 2, z: 0 }, ], color: getColor("CYAN"), showPoints: false, smooth: false, }, { points: [ { x: -3, y: -2, z: 0 }, { x: 3, y: -2, z: 0 }, ], color: getColor("TEAL"), showPoints: false, smooth: false, }, ]} cameraPosition={[0, 0, 12]} showZAxis={false} /> Untuk : - Garis singgung persekutuan luar **sejajar** dengan garis yang menghubungkan kedua pusat - Panjang garis singgung persekutuan luar = (jarak antara pusat) ## Kasus Berbagai Posisi Lingkaran Tentukan panjang garis singgung persekutuan luar dan dalam untuk lingkaran-lingkaran berikut: ### Lingkaran Berjauhan Lingkaran pertama berpusat di dengan jari-jari 1, lingkaran kedua berpusat di dengan jari-jari 2. { const angle = (i * Math.PI) / 180; return { x: -6 + 1 * Math.cos(angle), y: 1 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 6 + 2 * Math.cos(angle), y: 2 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: (() => { const O1 = { x: -6, y: 0 }; const O2 = { x: 6, y: 0 }; const r1 = 1; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // First tangent line (upper) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux + cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy + cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux + cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy + cos_alpha * vy); const tdx = T2x - T1x; const tdy = T2y - T1y; const tlen = Math.sqrt(tdx * tdx + tdy * tdy); const tux = tdx / tlen; const tuy = tdy / tlen; return [ { x: T1x - 2 * tux, y: T1y - 2 * tuy, z: 0 }, { x: T2x + 2 * tux, y: T2y + 2 * tuy, z: 0 }, ]; })(), color: getColor("CYAN"), showPoints: false, }, { points: (() => { const O1 = { x: -6, y: 0 }; const O2 = { x: 6, y: 0 }; const r1 = 1; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); // Calculate the angle for external tangent const sin_alpha = (r2 - r1) / d; const cos_alpha = Math.sqrt(1 - sin_alpha * sin_alpha); // Direction from O1 to O2 const dx = O2.x - O1.x; const dy = O2.y - O1.y; // Normalize direction const ux = dx / d; const uy = dy / d; // Perpendicular direction (rotated 90 degrees) const vx = -uy; const vy = ux; // Second tangent line (lower) // Tangent point on first circle const T1x = O1.x + r1 * (sin_alpha * ux - cos_alpha * vx); const T1y = O1.y + r1 * (sin_alpha * uy - cos_alpha * vy); // Tangent point on second circle const T2x = O2.x + r2 * (sin_alpha * ux - cos_alpha * vx); const T2y = O2.y + r2 * (sin_alpha * uy - cos_alpha * vy); const tdx = T2x - T1x; const tdy = T2y - T1y; const tlen = Math.sqrt(tdx * tdx + tdy * tdy); const tux = tdx / tlen; const tuy = tdy / tlen; return [ { x: T1x - 2 * tux, y: T1y - 2 * tuy, z: 0 }, { x: T2x + 2 * tux, y: T2y + 2 * tuy, z: 0 }, ]; })(), color: getColor("TEAL"), showPoints: false, }, { points: (() => { const O1 = { x: -6, y: 0 }; const O2 = { x: 6, y: 0 }; const r1 = 1; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta + Math.PI / 2 - alpha); const T1y = O1.y + r1 * Math.sin(theta + Math.PI / 2 - alpha); const T2x = O2.x + r2 * Math.cos(theta + Math.PI / 2 - alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta + Math.PI / 2 - alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 1 * ux, y: T1y - 1 * uy, z: 0 }, { x: T2x + 1 * ux, y: T2y + 1 * uy, z: 0 }, ]; })(), color: getColor("PINK"), showPoints: false, }, { points: (() => { const O1 = { x: -6, y: 0 }; const O2 = { x: 6, y: 0 }; const r1 = 1; const r2 = 2; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta - Math.PI / 2 + alpha); const T1y = O1.y + r1 * Math.sin(theta - Math.PI / 2 + alpha); const T2x = O2.x + r2 * Math.cos(theta - Math.PI / 2 + alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta - Math.PI / 2 + alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 1 * ux, y: T1y - 1 * uy, z: 0 }, { x: T2x + 1 * ux, y: T2y + 1 * uy, z: 0 }, ]; })(), color: getColor("AMBER"), showPoints: false, }, ]} cameraPosition={[0, 0, 18]} showZAxis={false} /> **Penyelesaian:**
### Lingkaran Berdekatan Lingkaran pertama berpusat di dengan jari-jari 1.5, lingkaran kedua berpusat di dengan jari-jari 1.5. { const angle = (i * Math.PI) / 180; return { x: -2 + 1.5 * Math.cos(angle), y: 1.5 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: Array.from({ length: 361 }, (_, i) => { const angle = (i * Math.PI) / 180; return { x: 2 + 1.5 * Math.cos(angle), y: 1.5 * Math.sin(angle), z: 0, }; }), color: getColor("PURPLE"), showPoints: false, }, { points: [ { x: -5, y: 1.5, z: 0 }, { x: 5, y: 1.5, z: 0 }, ], color: getColor("CYAN"), showPoints: false, smooth: false, }, { points: [ { x: -5, y: -1.5, z: 0 }, { x: 5, y: -1.5, z: 0 }, ], color: getColor("TEAL"), showPoints: false, smooth: false, }, { points: (() => { const O1 = { x: -2, y: 0 }; const O2 = { x: 2, y: 0 }; const r1 = 1.5; const r2 = 1.5; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta + Math.PI / 2 - alpha); const T1y = O1.y + r1 * Math.sin(theta + Math.PI / 2 - alpha); const T2x = O2.x + r2 * Math.cos(theta + Math.PI / 2 - alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta + Math.PI / 2 - alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 2 * ux, y: T1y - 2 * uy, z: 0 }, { x: T2x + 2 * ux, y: T2y + 2 * uy, z: 0 }, ]; })(), color: getColor("PINK"), showPoints: false, }, { points: (() => { const O1 = { x: -2, y: 0 }; const O2 = { x: 2, y: 0 }; const r1 = 1.5; const r2 = 1.5; const d = Math.sqrt((O2.x - O1.x) ** 2 + (O2.y - O1.y) ** 2); const alpha = Math.asin((r1 + r2) / d); const theta = Math.atan2(O2.y - O1.y, O2.x - O1.x); const T1x = O1.x + r1 * Math.cos(theta - Math.PI / 2 + alpha); const T1y = O1.y + r1 * Math.sin(theta - Math.PI / 2 + alpha); const T2x = O2.x + r2 * Math.cos(theta - Math.PI / 2 + alpha + Math.PI); const T2y = O2.y + r2 * Math.sin(theta - Math.PI / 2 + alpha + Math.PI); const dx = T2x - T1x; const dy = T2y - T1y; const len = Math.sqrt(dx * dx + dy * dy); const ux = dx / len; const uy = dy / len; return [ { x: T1x - 2 * ux, y: T1y - 2 * uy, z: 0 }, { x: T2x + 2 * ux, y: T2y + 2 * uy, z: 0 }, ]; })(), color: getColor("AMBER"), showPoints: false, }, ]} cameraPosition={[0, 0, 10]} showZAxis={false} /> **Penyelesaian:**
## Latihan Soal 1. Dua lingkaran masing-masing berpusat di dengan jari-jari 2 dan dengan jari-jari 3. Tentukan: - Panjang garis singgung persekutuan luar - Panjang garis singgung persekutuan dalam 2. Lingkaran pertama memiliki pusat dengan jari-jari 4, lingkaran kedua memiliki pusat dengan jari-jari 2. Hitunglah panjang kedua jenis garis singgung persekutuan! 3. Dua lingkaran identik masing-masing berjari-jari 3 cm. Jika panjang garis singgung persekutuan dalam adalah 8 cm, tentukan jarak antara kedua pusat lingkaran! 4. Lingkaran berpusat di dengan jari-jari , dan lingkaran berpusat di dengan jari-jari . Jika panjang garis singgung persekutuan luar adalah , tentukan nilai ! 5. Tentukan syarat agar dua lingkaran memiliki: - Tepat dua garis singgung persekutuan - Tepat tiga garis singgung persekutuan - Tepat empat garis singgung persekutuan ### Kunci Jawaban 1. **Menghitung panjang garis singgung persekutuan**
2. **Lingkaran dengan pusat berbeda**
3. **Mencari jarak pusat dari panjang garis singgung dalam** Diketahui: ,
4. **Mencari nilai r** Diketahui: , , ,
5. **Syarat jumlah garis singgung persekutuan** - **Tepat 2 garis singgung**: Kedua lingkaran berpotongan di dua titik - **Tepat 3 garis singgung**: Kedua lingkaran bersinggungan (dalam atau luar) - **Tepat 4 garis singgung**: Kedua lingkaran terpisah (tidak berpotongan)