{"id":8765,"date":"2026-08-21T21:31:26","date_gmt":"2026-08-22T00:31:26","guid":{"rendered":"https:\/\/fisica2.fica.unsl.edu.ar\/?page_id=8765"},"modified":"2026-08-21T22:35:20","modified_gmt":"2026-08-22T01:35:20","slug":"movimiento_mru_mrua_borrador_prueba","status":"publish","type":"page","link":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/","title":{"rendered":"movimiento_MRU_MRUA_borrador_prueba"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"8765\" class=\"elementor elementor-8765\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0e73543 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0e73543\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0c286f0\" data-id=\"0c286f0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a8c0d06 elementor-widget elementor-widget-html\" data-id=\"a8c0d06\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>FISAR_SIM \u2013 MRU\/MRUA | FICA \u2013 UNSL<\/title>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.7\/dist\/chart.umd.min.js\"><\/script>\r\n<style>\r\n\/* ============================================\r\n   FISAR_SIM \u2013 MRU\/MRUA \u2013 Universidad Nacional de San Luis\r\n   Layout optimizado para legibilidad e interacci\u00f3n estudiantil\r\n   ============================================ *\/\r\n\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600;700&display=swap');\r\n\r\n:root {\r\n  --bg: #f4f6f8;\r\n  --surface: #ffffff;\r\n  --surface-hover: #f8fafc;\r\n  --border: #d1d5db;\r\n  --border-light: #e5e7eb;\r\n  --text: #111827;\r\n  --text-secondary: #374151;\r\n  --text-muted: #6b7280;\r\n  --text-on-primary: #ffffff;\r\n  --primary: #0d7377;\r\n  --primary-light: #14a3a8;\r\n  --primary-dark: #095456;\r\n  --primary-ghost: rgba(13,115,119,0.08);\r\n  --accent: #d97706;\r\n  --accent-light: #fbbf24;\r\n  --accent-ghost: rgba(217,119,6,0.08);\r\n  --vel-color: #15803d;\r\n  --acc-color: #dc2626;\r\n  --pos-color: #1d4ed8;\r\n  --cmp-color: #7c3aed;\r\n  --success: #16a34a;\r\n  --success-ghost: rgba(22,163,74,0.08);\r\n  --radius: 12px;\r\n  --radius-sm: 8px;\r\n  --radius-xs: 6px;\r\n  --shadow-sm: 0 1px 3px rgba(0,0,0,0.07);\r\n  --shadow-md: 0 4px 12px rgba(0,0,0,0.08);\r\n  --shadow-lg: 0 8px 24px rgba(0,0,0,0.10);\r\n  --font: 'Inter', system-ui, -apple-system, sans-serif;\r\n  --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', Consolas, monospace;\r\n  --text-xs: 0.72rem;\r\n  --text-sm: 0.82rem;\r\n  --text-base: 0.92rem;\r\n  --text-md: 1.05rem;\r\n  --text-lg: 1.2rem;\r\n  --text-xl: 1.4rem;\r\n}\r\n* { margin: 0; padding: 0; box-sizing: border-box; }\r\nhtml, body {\r\n  min-height: 100%;\r\n  overflow-y: auto;\r\n  font-family: var(--font);\r\n  background: var(--bg);\r\n  color: var(--text);\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n\/* === HEADER === *\/\r\n.header {\r\n  background: var(--surface);\r\n  border-bottom: 1px solid var(--border-light);\r\n  padding: 14px 28px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 20px;\r\n  min-height: 64px;\r\n  flex-shrink: 0;\r\n  box-shadow: var(--shadow-sm);\r\n}\r\n.brand-top { font-size: 0.78rem; font-weight: 800; color: var(--primary); letter-spacing: 2.5px; text-transform: uppercase; }\r\n.brand-top img { display: block; }\r\n.brand-sub { font-size: 0.78rem; color: var(--text-muted); font-weight: 500; margin-top: 2px; }\r\n.header h1 { font-size: 1.25rem; font-weight: 700; color: var(--text); letter-spacing: -0.3px; }\r\n.header .subtitle { font-size: 0.88rem; color: var(--text-secondary); font-weight: 400; margin-top: 2px; }\r\n\r\n\/* === MAIN === *\/\r\n.main {\r\n  display: grid;\r\n  grid-template-rows: auto auto auto auto auto;\r\n  gap: 12px;\r\n  padding: 12px 14px;\r\n  max-width: 1600px;\r\n  margin: 0 auto;\r\n}\r\n\r\n\/* === TOP ROW === *\/\r\n.top-row {\r\n  display: grid;\r\n  grid-template-columns: 240px 1fr 260px;\r\n  gap: 12px;\r\n  min-height: 0;\r\n}\r\n\r\n\/* === CARDS === *\/\r\n.card {\r\n  background: var(--surface);\r\n  border: 1px solid var(--border-light);\r\n  border-radius: var(--radius);\r\n  box-shadow: var(--shadow-sm);\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  transition: box-shadow 0.2s ease, border-color 0.2s ease;\r\n}\r\n.card:hover { box-shadow: var(--shadow-md); border-color: var(--border); }\r\n.card-header {\r\n  padding: 10px 16px;\r\n  font-size: 0.78rem;\r\n  font-weight: 700;\r\n  color: var(--text-secondary);\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.8px;\r\n  border-bottom: 1px solid var(--border-light);\r\n  background: #f9fafb;\r\n  flex-shrink: 0;\r\n}\r\n.card-body { padding: 14px 16px; flex: 1; min-height: 0; overflow-y: auto; }\r\n.card-body::-webkit-scrollbar { width: 5px; }\r\n.card-body::-webkit-scrollbar-thumb { background: #c8cbd0; border-radius: 3px; }\r\n\r\n\/* === SIDEBAR === *\/\r\n.sidebar-left, .sidebar-right { display: flex; flex-direction: column; gap: 10px; }\r\n.sidebar-left .card, .sidebar-right .card { flex: 1 1 auto; min-height: 0; }\r\n\r\n\/* === PAR\u00c1METROS === *\/\r\n.param-group { margin-bottom: 12px; }\r\n.param-group:last-child { margin-bottom: 0; }\r\n.param-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }\r\n.param-row .param-name { font-size: var(--text-base); font-weight: 600; white-space: nowrap; color: var(--text); }\r\n.param-row .unit { font-size: var(--text-xs); color: var(--text-muted); margin-left: 3px; font-weight: 500; }\r\n.param-row input[type=\"number\"] {\r\n  width: 84px; padding: 7px 8px; border: 2px solid var(--border-light);\r\n  border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: var(--text-sm);\r\n  font-weight: 600; text-align: center; outline: none; color: var(--text); background: var(--surface);\r\n  transition: border-color 0.2s, box-shadow 0.2s;\r\n}\r\n.param-row input[type=\"number\"]:hover { border-color: var(--border); }\r\n.param-row input[type=\"number\"]:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(13,115,119,0.12); }\r\n.param-row input[type=\"number\"]::-webkit-inner-spin-button,\r\n.param-row input[type=\"number\"]::-webkit-outer-spin-button { opacity: 1; height: 20px; }\r\n\r\n\/* === PRESETS === *\/\r\n.preset-grid { display: flex; flex-wrap: wrap; gap: 6px; }\r\n.preset-btn {\r\n  padding: 7px 14px; font-size: var(--text-xs); font-weight: 600;\r\n  border: 1.5px solid var(--border-light); border-radius: var(--radius-xs);\r\n  background: var(--surface); cursor: pointer; text-align: center;\r\n  color: var(--text-secondary); transition: all 0.15s; font-family: var(--font);\r\n  letter-spacing: 0.3px;\r\n}\r\n.preset-btn:hover {\r\n  background: var(--primary); color: #fff; border-color: var(--primary);\r\n  transform: translateY(-1px); box-shadow: var(--shadow-sm);\r\n}\r\n.preset-btn:active { transform: translateY(0); }\r\n\r\n\/* === OPCIONES === *\/\r\n.option-row {\r\n  display: flex; align-items: center; gap: 10px; margin-bottom: 10px;\r\n  font-size: var(--text-sm); font-weight: 500; color: var(--text-secondary);\r\n  cursor: pointer; padding: 4px 6px; border-radius: var(--radius-xs);\r\n  transition: background 0.15s;\r\n}\r\n.option-row:hover { background: var(--primary-ghost); }\r\n.option-row:last-child { margin-bottom: 0; }\r\n.option-row input[type=\"checkbox\"] { accent-color: var(--primary); width: 18px; height: 18px; cursor: pointer; flex-shrink: 0; }\r\n.opt-dot { display: inline-block; width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; box-shadow: inset 0 0 0 1.5px rgba(0,0,0,0.1); }\r\n\r\n\/* === CONTROLES === *\/\r\n.controls-row { display: flex; gap: 8px; flex-wrap: wrap; }\r\n.btn {\r\n  display: inline-flex; align-items: center; justify-content: center; gap: 6px;\r\n  padding: 9px 16px; border: 1.5px solid var(--border-light); border-radius: var(--radius-xs);\r\n  background: var(--surface); font-family: var(--font); font-size: var(--text-sm);\r\n  font-weight: 600; cursor: pointer; color: var(--text-secondary); transition: all 0.15s;\r\n  white-space: nowrap; min-height: 40px; letter-spacing: 0.2px;\r\n}\r\n.btn:hover { background: var(--surface-hover); border-color: var(--border); transform: translateY(-1px); box-shadow: var(--shadow-sm); }\r\n.btn:active { transform: translateY(0) scale(0.98); }\r\n.btn-primary { background: var(--primary); color: #fff; border-color: var(--primary); }\r\n.btn-primary:hover { background: var(--primary-dark); border-color: var(--primary-dark); box-shadow: 0 4px 12px rgba(13,115,119,0.25); }\r\n.btn-sm { padding: 7px 12px; font-size: var(--text-xs); min-height: 34px; font-weight: 600; }\r\n.btn-icon { padding: 9px 14px; font-size: 1.1rem; min-width: 44px; }\r\n\r\n.speed-selector {\r\n  display: flex; margin-left: auto; border: 1.5px solid var(--border-light);\r\n  border-radius: var(--radius-xs); overflow: hidden; background: var(--surface);\r\n}\r\n.speed-btn {\r\n  padding: 7px 12px; border: none; background: var(--surface); font-family: var(--font-mono);\r\n  font-size: var(--text-xs); font-weight: 600; cursor: pointer; color: var(--text-muted);\r\n  border-right: 1px solid var(--border-light); transition: all 0.15s; min-height: 34px;\r\n}\r\n.speed-btn:last-child { border-right: none; }\r\n.speed-btn:hover { background: var(--surface-hover); color: var(--text-secondary); }\r\n.speed-btn.active { background: var(--primary); color: #fff; font-weight: 700; }\r\n\r\n\/* === CANVAS CENTRAL === *\/\r\n.canvas-col { display: flex; flex-direction: column; min-height: 0; }\r\n.time-display {\r\n  text-align: center; padding: 10px 0; font-family: var(--font-mono);\r\n  font-size: 1.3rem; font-weight: 700; color: var(--primary-dark);\r\n  background: var(--surface); border: 1px solid var(--border-light);\r\n  border-bottom: none; border-radius: var(--radius) var(--radius) 0 0;\r\n  flex-shrink: 0; letter-spacing: 0.5px;\r\n}\r\n.canvas-container {\r\n  height: 240px; min-height: 180px; position: relative;\r\n  background: var(--surface); border-left: 1px solid var(--border-light);\r\n  border-right: 1px solid var(--border-light);\r\n}\r\n.canvas-container canvas { width: 100%; height: 100%; display: block; }\r\n.controls-bar {\r\n  display: flex; align-items: center; gap: 8px; padding: 10px 14px;\r\n  background: var(--surface); border: 1px solid var(--border-light);\r\n  border-top: none; border-radius: 0 0 var(--radius) var(--radius);\r\n  flex-shrink: 0; flex-wrap: wrap;\r\n}\r\n\r\n\/* === VARIABLES EN TIEMPO REAL === *\/\r\n.info-row {\r\n  display: flex; justify-content: space-between; align-items: center;\r\n  padding: 8px 0; border-bottom: 1.5px solid var(--border-light);\r\n}\r\n.info-row:last-child { border-bottom: none; }\r\n.info-label { font-size: var(--text-sm); font-weight: 600; color: var(--text-secondary); }\r\n.info-value { font-family: var(--font-mono); font-size: var(--text-sm); font-weight: 700; }\r\n.iv-t { color: var(--primary); }\r\n.iv-x { color: var(--pos-color); }\r\n.iv-v { color: var(--vel-color); }\r\n.iv-a { color: var(--acc-color); }\r\n.iv-dx { color: var(--accent); }\r\n\r\n\/* === EVENT BOX === *\/\r\n.event-box {\r\n  margin-top: 12px; padding: 10px 12px; background: #fffbeb;\r\n  border-left: 4px solid var(--accent); border-radius: 0 var(--radius-xs) var(--radius-xs) 0;\r\n  font-size: var(--text-xs); display: none;\r\n  animation: slideIn 0.3s ease;\r\n}\r\n@keyframes slideIn {\r\n  from { opacity: 0; transform: translateX(-8px); }\r\n  to { opacity: 1; transform: translateX(0); }\r\n}\r\n.event-box.visible { display: block; }\r\n.event-title { font-weight: 700; color: #b45309; margin-bottom: 4px; font-size: var(--text-sm); }\r\n.event-detail { color: var(--text-secondary); font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 500; }\r\n\r\n\/* === MODELO MATEM\u00c1TICO === *\/\r\n.math-panel {\r\n  padding: 14px 10px; background: #f8fafc; border-radius: var(--radius-xs);\r\n  text-align: center; line-height: 2.2; border: 1px solid var(--border-light);\r\n}\r\n.math-panel div { margin: 4px 0; }\r\n.eq { font-family: 'Times New Roman', Georgia, serif; font-size: 1.15rem; font-weight: 500; }\r\n.eq-var { font-style: italic; font-weight: 600; }\r\n.eq-unit { font-size: var(--text-xs); color: var(--text-muted); font-family: var(--font); font-style: normal; margin-left: 6px; font-weight: 600; }\r\n.eq-sup { font-size: 0.75em; vertical-align: super; }\r\n.eq-sub { font-size: 0.75em; vertical-align: sub; }\r\n\r\n\/* === OVERLAY === *\/\r\n.overlay {\r\n  display: none; position: fixed; inset: 0; z-index: 900;\r\n  background: rgba(0,0,0,0.45); align-items: center; justify-content: center;\r\n  backdrop-filter: blur(3px);\r\n}\r\n.overlay.open { display: flex; }\r\n.overlay-box {\r\n  background: var(--surface); border-radius: var(--radius); box-shadow: var(--shadow-lg);\r\n  max-width: 520px; width: 92%; max-height: 85vh; overflow-y: auto;\r\n  border: 1px solid var(--border-light);\r\n}\r\n.overlay-header {\r\n  padding: 14px 20px; border-bottom: 1px solid var(--border-light);\r\n  display: flex; justify-content: space-between; align-items: center;\r\n  font-size: var(--text-sm); font-weight: 700; color: var(--text-secondary);\r\n  text-transform: uppercase; letter-spacing: 0.8px; background: #f9fafb;\r\n}\r\n.overlay-close {\r\n  background: none; border: none; font-size: 1.3rem; cursor: pointer;\r\n  color: var(--text-muted); padding: 4px 8px; border-radius: var(--radius-xs);\r\n  transition: all 0.15s; line-height: 1;\r\n}\r\n.overlay-close:hover { background: var(--border-light); color: var(--text); }\r\n.overlay-body { padding: 20px 22px; }\r\n\r\n\/* === PEDAG\u00d3GICO === *\/\r\n.pedagogical-list { list-style: none; padding: 0; }\r\n.pedagogical-list li {\r\n  padding: 10px 0 10px 22px; font-size: var(--text-sm); color: var(--text-secondary);\r\n  border-bottom: 1px solid var(--border-light); position: relative; word-break: break-word;\r\n  line-height: 1.55; font-weight: 500;\r\n}\r\n.pedagogical-list li:last-child { border-bottom: none; }\r\n.pedagogical-list li::before {\r\n  content: '\u25cf'; color: var(--primary); font-size: 0.55rem;\r\n  position: absolute; left: 4px; top: 14px;\r\n}\r\n.pedagogical-list li b { color: var(--text); font-weight: 700; }\r\n\r\n\/* === GRAPHS ROW === *\/\r\n.graphs-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }\r\n.graph-card { min-height: 280px; overflow: hidden; }\r\n.graph-card .card-body { position: relative; padding: 8px 10px 6px; }\r\n.graph-card canvas { width: 100% !important; height: 100% !important; }\r\n\r\n\/* === EXTRAS ROW === *\/\r\n.extras-row { display: grid; grid-template-columns: 1fr 1.3fr 0.9fr; gap: 12px; }\r\n.extras-row .card-body { overflow: visible; }\r\n\r\n\/* === BOTTOM ROW === *\/\r\n.bottom-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; flex-shrink: 0; }\r\n.exp-controls { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }\r\n.data-table-wrap {\r\n  max-height: 140px; overflow-y: auto; border: 1.5px solid var(--border-light);\r\n  border-radius: var(--radius-xs); background: var(--surface);\r\n}\r\n.data-table-wrap table { width: 100%; border-collapse: collapse; font-size: var(--text-xs); }\r\n.data-table-wrap th, .data-table-wrap td {\r\n  padding: 6px 10px; text-align: center; border-bottom: 1px solid var(--border-light); font-weight: 500;\r\n}\r\n.data-table-wrap th {\r\n  background: #f9fafb; font-weight: 700; color: var(--text-secondary);\r\n  position: sticky; top: 0; font-size: var(--text-xs);\r\n  text-transform: uppercase; letter-spacing: 0.5px;\r\n}\r\n.data-table-wrap td { font-family: var(--font-mono); font-weight: 600; }\r\n.empty-msg { padding: 16px; text-align: center; color: var(--text-muted); font-size: var(--text-sm); font-weight: 500; }\r\n.data-table-wrap::-webkit-scrollbar { width: 5px; }\r\n.data-table-wrap::-webkit-scrollbar-thumb { background: #c8cbd0; border-radius: 3px; }\r\n\r\n\/* === FOOTER === *\/\r\n.footer {\r\n  text-align: center; padding: 14px 28px; font-size: 0.72rem;\r\n  color: var(--text-muted); border-top: 1px solid var(--border-light);\r\n  background: var(--surface); font-weight: 500; letter-spacing: 0.3px;\r\n}\r\n\r\n\/* === TOAST === *\/\r\n.toast {\r\n  position: fixed; bottom: 28px; left: 50%; transform: translateX(-50%) translateY(12px);\r\n  padding: 12px 24px; background: var(--text); color: #fff; border-radius: var(--radius-xs);\r\n  font-size: var(--text-sm); font-weight: 600; opacity: 0;\r\n  transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); z-index: 1000;\r\n  pointer-events: none; box-shadow: var(--shadow-lg); letter-spacing: 0.2px;\r\n}\r\n.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }\r\n\r\n\/* === GU\u00cdA === *\/\r\n.btn-guia {\r\n  position: fixed; bottom: 28px; left: 28px; z-index: 999;\r\n  background: var(--success); color: #fff; font-family: var(--font);\r\n  font-size: var(--text-xs); font-weight: 700; letter-spacing: 1px;\r\n  text-transform: uppercase; padding: 12px 20px; border-radius: var(--radius-xs);\r\n  border: none; cursor: pointer; box-shadow: 0 4px 16px rgba(22,163,74,0.35);\r\n  transition: transform 0.2s, box-shadow 0.2s; display: flex; align-items: center; gap: 8px;\r\n}\r\n.btn-guia:hover { transform: translateY(-2px); box-shadow: 0 6px 24px rgba(22,163,74,0.45); }\r\n.btn-guia svg { width: 16px; height: 16px; flex-shrink: 0; }\r\n.guia-panel {\r\n  position: fixed; bottom: 80px; left: 28px; width: 460px; max-height: 75vh;\r\n  z-index: 1000; background: var(--surface); border: 1px solid var(--border-light);\r\n  border-radius: var(--radius); box-shadow: var(--shadow-lg); display: none;\r\n  flex-direction: column; overflow: hidden; font-family: var(--font);\r\n}\r\n.guia-panel.visible { display: flex; }\r\n.guia-header {\r\n  display: flex; justify-content: space-between; align-items: center;\r\n  padding: 14px 18px; border-bottom: 1px solid var(--border-light);\r\n  flex-shrink: 0; background: #f9fafb;\r\n}\r\n.guia-header-title {\r\n  display: flex; align-items: center; gap: 10px;\r\n  font-size: var(--text-sm); font-weight: 700; color: var(--text);\r\n  text-transform: uppercase; letter-spacing: 0.8px;\r\n}\r\n.guia-header-title svg { width: 18px; height: 18px; color: var(--success); }\r\n.guia-close {\r\n  background: none; border: none; color: var(--text-muted); font-size: 1.2rem;\r\n  cursor: pointer; padding: 4px 8px; border-radius: var(--radius-xs);\r\n  transition: all 0.15s; line-height: 1;\r\n}\r\n.guia-close:hover { color: var(--text); background: var(--border-light); }\r\n.guia-body {\r\n  overflow-y: auto; padding: 22px 22px 24px;\r\n  color: var(--text-secondary); font-size: var(--text-sm);\r\n  line-height: 1.7; background: var(--surface);\r\n}\r\n.guia-body::-webkit-scrollbar { width: 6px; }\r\n.guia-body::-webkit-scrollbar-track { background: transparent; }\r\n.guia-body::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }\r\n.guia-section-title {\r\n  font-size: var(--text-md); font-weight: 700; color: var(--text);\r\n  margin: 0 0 14px 0; padding-bottom: 10px; border-bottom: 2px solid var(--border-light);\r\n}\r\n.guia-block { margin-bottom: 18px; }\r\n.guia-label {\r\n  font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 1.2px;\r\n  color: var(--text-muted); margin-bottom: 6px; font-weight: 700;\r\n}\r\n.guia-text { color: var(--text-secondary); font-weight: 500; }\r\n.guia-formula {\r\n  background: #f8fafc; border: 1.5px solid var(--border-light);\r\n  border-radius: var(--radius-xs); padding: 14px 18px; text-align: center;\r\n  font-family: var(--font-mono); font-size: var(--text-base); color: var(--pos-color);\r\n  margin: 12px 0; font-weight: 600;\r\n}\r\n.guia-steps { list-style: none; margin: 0; padding: 0; counter-reset: steps; }\r\n.guia-steps li {\r\n  counter-increment: steps; display: flex; gap: 12px;\r\n  margin-bottom: 10px; align-items: flex-start;\r\n  color: var(--text-secondary); font-weight: 500;\r\n}\r\n.guia-steps li::before {\r\n  content: counter(steps); background: var(--success-ghost); color: var(--success);\r\n  font-size: var(--text-xs); font-weight: 700; width: 26px; height: 26px;\r\n  border-radius: 50%; display: flex; align-items: center; justify-content: center;\r\n  flex-shrink: 0; margin-top: 1px; border: 2px solid rgba(22,163,74,0.2);\r\n}\r\n.guia-result {\r\n  background: var(--success-ghost); border-left: 4px solid var(--success);\r\n  border-radius: 0 var(--radius-xs) var(--radius-xs) 0;\r\n  padding: 14px 18px; color: var(--text); font-size: var(--text-sm);\r\n  margin-top: 12px; font-weight: 500;\r\n}\r\n.guia-params {\r\n  background: #f8fafc; border: 1.5px solid var(--border-light);\r\n  border-radius: var(--radius-xs); padding: 12px 16px;\r\n  font-size: var(--text-sm); color: var(--text-secondary); font-weight: 500;\r\n}\r\n.guia-params span { color: var(--pos-color); font-family: var(--font-mono); font-weight: 600; }\r\n\r\n\/* === TOOLTIP === *\/\r\n[data-tooltip] { position: relative; }\r\n[data-tooltip]::after {\r\n  content: attr(data-tooltip); position: absolute;\r\n  bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%) translateY(4px);\r\n  background: var(--text); color: #fff; padding: 6px 12px;\r\n  border-radius: var(--radius-xs); font-size: var(--text-xs);\r\n  font-weight: 600; white-space: nowrap; opacity: 0;\r\n  pointer-events: none; transition: all 0.2s; z-index: 100; letter-spacing: 0.3px;\r\n}\r\n[data-tooltip]:hover::after { opacity: 1; transform: translateX(-50%) translateY(0); }\r\n\r\n\/* === RESPONSIVE === *\/\r\n@media (max-width: 1200px) {\r\n  .top-row { grid-template-columns: 220px 1fr 240px; }\r\n}\r\n@media (max-width: 1000px) {\r\n  .top-row { grid-template-columns: 200px 1fr 220px; }\r\n  .graphs-row { grid-template-columns: 1fr; }\r\n  .extras-row { grid-template-columns: 1fr; }\r\n  .bottom-row { grid-template-columns: 1fr; }\r\n  .guia-panel { width: 92vw; left: 4vw; bottom: 80px; }\r\n  .btn-guia { left: 16px; bottom: 16px; }\r\n}\r\n@media (max-width: 800px) {\r\n  .main { grid-template-rows: auto auto auto auto auto; }\r\n  .top-row { grid-template-columns: 1fr; }\r\n  .graphs-row { grid-template-columns: 1fr; }\r\n  .extras-row { grid-template-columns: 1fr; }\r\n  .bottom-row { grid-template-columns: 1fr; }\r\n  .header { flex-direction: column; align-items: flex-start; gap: 8px; padding: 14px 16px; }\r\n  .header h1 { font-size: 1.1rem; }\r\n  .canvas-container { height: 200px; }\r\n}\r\n<\/style>\r\n<base target=\"_blank\">\r\n<\/head>\r\n<body>\r\n\r\n<!-- =============== HEADER =============== -->\r\n<header class=\"header\">\r\n  <div>\r\n    <span class=\"brand-top\">\r\n      <a href=\"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/FISAR_SIM\/\">\r\n        <img decoding=\"async\" src=\"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png\" alt=\"FISAR_SIM\" width=\"90\" height=\"42\">\r\n      <\/a>\r\n    <\/span>\r\n    <div class=\"brand-sub\">FICA \u2013 Universidad Nacional de San Luis<\/div>\r\n  <\/div>\r\n  <div>\r\n    <h1>Cinem\u00e1tica. Movimiento Rectil\u00edneo MRU y MRUA<\/h1>\r\n    <div class=\"subtitle\">Exploraci\u00f3n interactiva de la posici\u00f3n, velocidad y aceleraci\u00f3n<\/div>\r\n  <\/div>\r\n<\/header>\r\n\r\n<!-- =============== MAIN CONTENT =============== -->\r\n<main class=\"main\">\r\n\r\n  <!-- ====== FILA SUPERIOR ====== -->\r\n  <div class=\"top-row\">\r\n\r\n    <!-- COLUMNA IZQUIERDA -->\r\n    <div class=\"sidebar-left\">\r\n      <div class=\"card\">\r\n        <div class=\"card-header\">Par\u00e1metros del movimiento<\/div>\r\n        <div class=\"card-body\">\r\n          <div class=\"param-group\">\r\n            <div class=\"param-row\">\r\n              <span><span class=\"param-name\">Posici\u00f3n inicial x\u2080<\/span><span class=\"unit\">m<\/span><\/span>\r\n              <input type=\"number\" id=\"input-x0\" min=\"-50\" max=\"50\" step=\"0.5\" value=\"0\">\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"param-group\">\r\n            <div class=\"param-row\">\r\n              <span><span class=\"param-name\">Velocidad inicial v\u2080<\/span><span class=\"unit\">m\/s<\/span><\/span>\r\n              <input type=\"number\" id=\"input-v0\" min=\"-20\" max=\"20\" step=\"0.5\" value=\"5\">\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"param-group\">\r\n            <div class=\"param-row\">\r\n              <span><span class=\"param-name\">Aceleraci\u00f3n a<\/span><span class=\"unit\">m\/s\u00b2<\/span><\/span>\r\n              <input type=\"number\" id=\"input-a\" min=\"-10\" max=\"10\" step=\"0.1\" value=\"2\">\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"param-group\">\r\n            <div class=\"param-row\">\r\n              <span><span class=\"param-name\">Tiempo m\u00e1ximo<\/span><span class=\"unit\">s<\/span><\/span>\r\n              <input type=\"number\" id=\"input-tmax\" min=\"2\" max=\"30\" step=\"1\" value=\"10\">\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- COLUMNA CENTRAL -->\r\n    <div class=\"canvas-col\">\r\n      <div class=\"time-display\" id=\"time-display\">t = 0.00 s<\/div>\r\n      <div class=\"canvas-container\">\r\n        <canvas id=\"simCanvas\"><\/canvas>\r\n      <\/div>\r\n      <div class=\"controls-bar\">\r\n        <div class=\"controls-row\">\r\n          <button class=\"btn btn-primary btn-icon\" id=\"btn-play\" data-tooltip=\"Iniciar (Barra espaciadora)\">\u25b6<\/button>\r\n          <button class=\"btn btn-icon\" id=\"btn-pause\" data-tooltip=\"Pausar\">\u23f8<\/button>\r\n          <button class=\"btn btn-icon\" id=\"btn-reset\" data-tooltip=\"Reiniciar (R)\">\u21bb<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-step\" data-tooltip=\"Avanzar paso a paso (\u2192)\">Paso \u2192<\/button>\r\n        <\/div>\r\n        <span style=\"font-size:var(--text-sm);color:var(--text-muted);margin-left:8px;font-weight:600;\">Velocidad:<\/span>\r\n        <div class=\"speed-selector\">\r\n          <button class=\"speed-btn\" data-speed=\"0.25\">0.25\u00d7<\/button>\r\n          <button class=\"speed-btn\" data-speed=\"0.5\">0.5\u00d7<\/button>\r\n          <button class=\"speed-btn active\" data-speed=\"1\">1\u00d7<\/button>\r\n          <button class=\"speed-btn\" data-speed=\"2\">2\u00d7<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- COLUMNA DERECHA -->\r\n    <div class=\"sidebar-right\">\r\n      <div class=\"card\">\r\n        <div class=\"card-header\">Variables en tiempo real<\/div>\r\n        <div class=\"card-body\">\r\n          <div class=\"info-row\"><span class=\"info-label\">Tiempo (t)<\/span><span class=\"info-value iv-t\" id=\"info-t\">0.00 s<\/span><\/div>\r\n          <div class=\"info-row\"><span class=\"info-label\">Posici\u00f3n (x)<\/span><span class=\"info-value iv-x\" id=\"info-x\">0.00 m<\/span><\/div>\r\n          <div class=\"info-row\"><span class=\"info-label\">Velocidad (v)<\/span><span class=\"info-value iv-v\" id=\"info-v\">5.00 m\/s<\/span><\/div>\r\n          <div class=\"info-row\"><span class=\"info-label\">Aceleraci\u00f3n (a)<\/span><span class=\"info-value iv-a\" id=\"info-a\">2.00 m\/s\u00b2<\/span><\/div>\r\n          <div class=\"info-row\"><span class=\"info-label\">Desplazamiento (\u0394x)<\/span><span class=\"info-value iv-dx\" id=\"info-dx\">0.00 m<\/span><\/div>\r\n          <div class=\"event-box\" id=\"event-box\">\r\n            <div class=\"event-title\" id=\"event-title\"><\/div>\r\n            <div class=\"event-detail\" id=\"event-detail\"><\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"card\" style=\"cursor:pointer;\" id=\"ped-header\">\r\n        <div class=\"card-header\" style=\"display:flex;justify-content:space-between;align-items:center;\">\r\n          <span>\u00bfQu\u00e9 podemos observar?<\/span>\r\n          <span style=\"font-size:var(--text-sm);color:var(--primary);font-weight:700;\">Abrir \u2192<\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ====== FILA GR\u00c1FICAS ====== -->\r\n  <div class=\"graphs-row\">\r\n    <div class=\"card graph-card\">\r\n      <div class=\"card-header\">Posici\u00f3n vs. Tiempo \u2014 x(t)<\/div>\r\n      <div class=\"card-body\"><canvas id=\"chartX\"><\/canvas><\/div>\r\n    <\/div>\r\n    <div class=\"card graph-card\">\r\n      <div class=\"card-header\">Velocidad vs. Tiempo \u2014 v(t)<\/div>\r\n      <div class=\"card-body\"><canvas id=\"chartV\"><\/canvas><\/div>\r\n    <\/div>\r\n    <div class=\"card graph-card\">\r\n      <div class=\"card-header\">Aceleraci\u00f3n vs. Tiempo \u2014 a(t)<\/div>\r\n      <div class=\"card-body\"><canvas id=\"chartA\"><\/canvas><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ====== FILA EXTRAS ====== -->\r\n  <div class=\"extras-row\">\r\n    <div class=\"card\">\r\n      <div class=\"card-header\">Experimentos predefinidos<\/div>\r\n      <div class=\"card-body\">\r\n        <div class=\"preset-grid\">\r\n          <button class=\"preset-btn\" data-preset=\"reposo\">Reposo con aceleraci\u00f3n<\/button>\r\n          <button class=\"preset-btn\" data-preset=\"acelerado\">Movimiento acelerado<\/button>\r\n          <button class=\"preset-btn\" data-preset=\"frenado\">Frenado<\/button>\r\n          <button class=\"preset-btn\" data-preset=\"cambio\">Cambio de sentido<\/button>\r\n          <button class=\"preset-btn\" data-preset=\"uniforme\">Movimiento uniforme<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"card\">\r\n      <div class=\"card-header\">Modelo matem\u00e1tico<\/div>\r\n      <div class=\"card-body\">\r\n        <div class=\"math-panel\" id=\"math-panel\">\r\n          <div id=\"eq-x\"><\/div>\r\n          <div id=\"eq-v\"><\/div>\r\n          <div id=\"eq-a\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"card\">\r\n      <div class=\"card-header\">Opciones de visualizaci\u00f3n<\/div>\r\n      <div class=\"card-body\">\r\n        <label class=\"option-row\"><input type=\"checkbox\" id=\"chk-vel\" checked><span class=\"opt-dot\" style=\"background:var(--vel-color)\"><\/span>Vector velocidad<\/label>\r\n        <label class=\"option-row\"><input type=\"checkbox\" id=\"chk-acc\" checked><span class=\"opt-dot\" style=\"background:var(--acc-color)\"><\/span>Vector aceleraci\u00f3n<\/label>\r\n        <label class=\"option-row\"><input type=\"checkbox\" id=\"chk-trail\" checked><span>Estela del m\u00f3vil<\/span><\/label>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- ====== FILA INFERIOR ====== -->\r\n  <div class=\"bottom-row\">\r\n    <div class=\"card\">\r\n      <div class=\"card-header\">Modo experimento \u2014 Registro de datos<\/div>\r\n      <div class=\"card-body\">\r\n        <div class=\"exp-controls\">\r\n          <button class=\"btn btn-sm btn-primary\" id=\"btn-register\" data-tooltip=\"Guardar valores actuales\">\ud83d\udccb Registrar dato<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-delete-last\" data-tooltip=\"Eliminar \u00faltima fila\">\ud83d\uddd1\ufe0f Eliminar \u00faltimo<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-clear-data\" data-tooltip=\"Borrar todos los datos\">\ud83e\uddf9 Limpiar tabla<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-export-csv\" data-tooltip=\"Descargar como CSV\">\ud83d\udce5 Exportar CSV<\/button>\r\n        <\/div>\r\n        <div class=\"data-table-wrap\" id=\"data-table-wrap\">\r\n          <div class=\"empty-msg\" id=\"empty-msg\">No hay datos registrados. Presion\u00e1 \"Registrar dato\" para comenzar.<\/div>\r\n          <table id=\"data-table\" style=\"display:none;\">\r\n            <thead><tr><th>t (s)<\/th><th>x (m)<\/th><th>v (m\/s)<\/th><th>a (m\/s\u00b2)<\/th><\/tr><\/thead>\r\n            <tbody id=\"data-tbody\"><\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"card\">\r\n      <div class=\"card-header\">Comparaci\u00f3n de movimientos<\/div>\r\n      <div class=\"card-body\">\r\n        <p style=\"font-size:var(--text-sm);color:var(--text-secondary);margin-bottom:12px;font-weight:500;line-height:1.55;\">Guard\u00e1 la configuraci\u00f3n actual y luego modific\u00e1 los par\u00e1metros para comparar dos experimentos simult\u00e1neamente en el canvas y las gr\u00e1ficas.<\/p>\r\n        <div style=\"display:flex;gap:8px;flex-wrap:wrap;\">\r\n          <button class=\"btn btn-sm\" id=\"btn-save-a\" style=\"border-color:var(--pos-color);color:var(--pos-color);font-weight:700;\" data-tooltip=\"Guardar configuraci\u00f3n actual\">\ud83d\udcbe Guardar como Exp. A<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-save-b\" style=\"border-color:var(--cmp-color);color:var(--cmp-color);font-weight:700;\" data-tooltip=\"Guardar configuraci\u00f3n actual\">\ud83d\udcbe Guardar como Exp. B<\/button>\r\n          <button class=\"btn btn-sm\" id=\"btn-clear-cmp\" data-tooltip=\"Eliminar comparaciones\">\ud83d\uddd1\ufe0f Limpiar comparaci\u00f3n<\/button>\r\n        <\/div>\r\n        <div id=\"cmp-display\" style=\"margin-top:12px;\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/main>\r\n\r\n<!-- =============== OVERLAY =============== -->\r\n<div class=\"overlay\" id=\"ped-overlay\">\r\n  <div class=\"overlay-box\">\r\n    <div class=\"overlay-header\">\r\n      \u00bfQu\u00e9 podemos observar?\r\n      <button class=\"overlay-close\" id=\"ped-close\">\u2715<\/button>\r\n    <\/div>\r\n    <div class=\"overlay-body\">\r\n      <ul class=\"pedagogical-list\">\r\n        <li>La <b>pendiente<\/b> de la gr\u00e1fica <span class=\"eq-var\">x<\/span>(<span class=\"eq-var\">t<\/span>) representa la <b>velocidad instant\u00e1nea<\/b>.<\/li>\r\n        <li>La <b>pendiente<\/b> de la gr\u00e1fica <span class=\"eq-var\">v<\/span>(<span class=\"eq-var\">t<\/span>) representa la <b>aceleraci\u00f3n<\/b>.<\/li>\r\n        <li>El <b>\u00e1rea bajo la curva<\/b> <span class=\"eq-var\">v<\/span>(<span class=\"eq-var\">t<\/span>) representa el <b>desplazamiento<\/b>.<\/li>\r\n        <li>En MRUA la aceleraci\u00f3n permanece <b>constante<\/b>.<\/li>\r\n        <li>Si <span class=\"eq-var\">v<\/span> = 0, el m\u00f3vil puede encontrarse en un <b>punto de retorno<\/b>.<\/li>\r\n        <li>Hac\u00e9 clic en cualquier gr\u00e1fico para navegar a ese instante de tiempo.<\/li>\r\n        <li>Us\u00e1 el modo <b>comparaci\u00f3n<\/b> para visualizar dos movimientos simult\u00e1neos y analizar sus diferencias.<\/li>\r\n      <\/ul>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- =============== FOOTER =============== -->\r\n<footer class=\"footer\">\r\n  FISAR_SIM \u2013 F\u00edsica 2 \u2013 Universidad Nacional de San Luis<br>\r\n  Simulaci\u00f3n educativa de Movimiento Rectil\u00edneo Uniforme y Uniformemente Acelerado\r\n<\/footer>\r\n\r\n<!-- Toast -->\r\n<div class=\"toast\" id=\"toast\"><\/div>\r\n\r\n<!-- =============== GU\u00cdA DE USO =============== -->\r\n<div class=\"guia-panel\" id=\"guiaPanel\">\r\n  <div class=\"guia-header\">\r\n    <div class=\"guia-header-title\">\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg>\r\n      Gu\u00eda de uso del laboratorio\r\n    <\/div>\r\n    <button class=\"guia-close\" onclick=\"toggleGuia()\">\u2715<\/button>\r\n  <\/div>\r\n  <div class=\"guia-body\">\r\n    <div class=\"guia-section-title\">Laboratorio de Cinem\u00e1tica: MRU y MRUA<\/div>\r\n    <div class=\"guia-block\">\r\n      <div class=\"guia-label\">Objetivo<\/div>\r\n      <div class=\"guia-text\">Comparar y analizar las caracter\u00edsticas del Movimiento Rectil\u00edneo Uniforme (MRU) y el Movimiento Rectil\u00edneo Uniformemente Acelerado (MRUA), estudiando sus leyes horarias y la interpretaci\u00f3n gr\u00e1fica de sus variables cinem\u00e1ticas.<\/div>\r\n    <\/div>\r\n    <div class=\"guia-block\">\r\n      <div class=\"guia-label\">Ecuaciones fundamentales<\/div>\r\n      <div class=\"guia-formula\">MRU: x(t) = x\u2080 + v \u00b7 t<\/div>\r\n      <div class=\"guia-formula\">MRUA: x(t) = x\u2080 + v\u2080\u00b7t + \u00bd\u00b7a\u00b7t\u00b2<\/div>\r\n      <div class=\"guia-formula\">v(t) = v\u2080 + a\u00b7t<\/div>\r\n    <\/div>\r\n    <div class=\"guia-block\">\r\n      <div class=\"guia-label\">C\u00f3mo usar la simulaci\u00f3n<\/div>\r\n      <ol class=\"guia-steps\">\r\n        <li>Ajust\u00e1 los par\u00e1metros iniciales (x\u2080, v\u2080, a, t m\u00e1x.) en el panel izquierdo.<\/li>\r\n        <li>Presion\u00e1 <b>\u25b6 Iniciar<\/b> para ver la animaci\u00f3n o us\u00e1 <b>Paso \u2192<\/b> para avanzar de a poco.<\/li>\r\n        <li>Observ\u00e1 las gr\u00e1ficas en tiempo real y las variables en el panel derecho.<\/li>\r\n        <li>Activ\u00e1 o desactiv\u00e1 vectores y estela desde <b>Opciones de visualizaci\u00f3n<\/b>.<\/li>\r\n        <li>Us\u00e1 <b>Registrar dato<\/b> para guardar valores en la tabla de experimentos.<\/li>\r\n        <li>Guard\u00e1 configuraciones con <b>Exp. A<\/b> y <b>Exp. B<\/b> para comparar movimientos.<\/li>\r\n        <li>Hac\u00e9 clic en cualquier gr\u00e1fica para saltar a ese instante de tiempo.<\/li>\r\n      <\/ol>\r\n    <\/div>\r\n    <div class=\"guia-block\">\r\n      <div class=\"guia-label\">Par\u00e1metros ajustables<\/div>\r\n      <div class=\"guia-params\">\r\n        \u2022 <span>x\u2080<\/span> \u2014 Posici\u00f3n inicial [m]<br>\r\n        \u2022 <span>v\u2080<\/span> \u2014 Velocidad inicial [m\/s]<br>\r\n        \u2022 <span>a<\/span> \u2014 Aceleraci\u00f3n [m\/s\u00b2]<br>\r\n        \u2022 <span>t m\u00e1x.<\/span> \u2014 Tiempo total de simulaci\u00f3n [s]\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"guia-result\">\r\n      <b>Observaciones clave:<\/b> En MRU la velocidad es constante y x(t) es una recta. En MRUA la velocidad cambia linealmente y x(t) es una par\u00e1bola. El \u00e1rea bajo v(t) equivale al desplazamiento \u0394x.\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<button class=\"btn-guia\" onclick=\"toggleGuia()\">\r\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg>\r\n  Gu\u00eda de uso\r\n<\/button>\r\n\r\n<script>\r\nfunction toggleGuia() {\r\n  document.getElementById('guiaPanel').classList.toggle('visible');\r\n}\r\n<\/script>\r\n\r\n<!-- =============== JAVASCRIPT =============== -->\r\n<script>\r\n\/\/ =====================================================================\r\n\/\/ FISAR_SIM \u2013 MRU\/MRUA Simulator (Mejorado)\r\n\/\/ Universidad Nacional de San Luis \u2013 F\u00edsica 2\r\n\/\/ =====================================================================\r\n\r\nvar CFG = {\r\n  dt: 0.04, stepSize: 0.05, trailLen: 50,\r\n  vecScaleV: 10, vecScaleA: 18,\r\n  carW: 48, carH: 22, carTopH: 18, wheelR: 7,\r\n  margin: { l: 55, r: 35, t: 40, b: 50 },\r\n  col: {\r\n    track: '#d1d5db', axis: '#9ca3af', origin: '#374151', grid: '#f0f1f3',\r\n    pos: '#1d4ed8', vel: '#15803d', acc: '#dc2626',\r\n    car: '#0d7377', carDk: '#095456', win: '#e0f2fe',\r\n    wheel: '#1e293b', hub: '#94a3b8',\r\n    x0Mark: '#d97706', retMark: '#dc2626', cmp: '#7c3aed',\r\n    trail: 'rgba(13,115,119,0.22)'\r\n  }\r\n};\r\n\r\nvar PRESETS = {\r\n  reposo:   { x0: 0,  v0: 0,  a: 2,  tMax: 10 },\r\n  acelerado:{ x0: 0,  v0: 5,  a: 2,  tMax: 10 },\r\n  frenado:  { x0: 0,  v0: 10, a: -2, tMax: 10 },\r\n  cambio:   { x0: 10, v0: -8, a: 2,  tMax: 10 },\r\n  uniforme: { x0: 0,  v0: 5,  a: 0,  tMax: 10 }\r\n};\r\n\r\nvar sim = {\r\n  x0: 0, v0: 5, a: 2, tMax: 10,\r\n  t: 0, playing: false, speed: 1,\r\n  showVel: true, showAcc: true, showTrail: true,\r\n  lastTs: null, finished: false\r\n};\r\n\r\nvar gData = { t: [], x: [], v: [], a: [] };\r\nvar lastGT = -1;\r\nvar expData = [];\r\nvar cmp = { a: null, b: null, showA: false, showB: false };\r\nvar canvas, ctx, cW, cH, dpr;\r\nvar chartX, chartV, chartA;\r\n\r\n\/\/ =====================================================================\r\n\/\/ F\u00cdSICA\r\n\/\/ =====================================================================\r\nfunction calcX(t, x0, v0, a) { return x0 + v0 * t + 0.5 * a * t * t; }\r\nfunction calcV(t, v0, a) { return v0 + a * t; }\r\n\r\nfunction xRange(x0, v0, a, tM) {\r\n  var xS = x0, xE = calcX(tM, x0, v0, a);\r\n  var mn = Math.min(xS, xE), mx = Math.max(xS, xE);\r\n  if (a !== 0) {\r\n    var tv = -v0 \/ a;\r\n    if (tv > 0.001 && tv < tM - 0.001) {\r\n      var xv = calcX(tv, x0, v0, a);\r\n      mn = Math.min(mn, xv); mx = Math.max(mx, xv);\r\n    }\r\n  }\r\n  var rng = mx - mn;\r\n  var pad = Math.max(rng * 0.15, 6);\r\n  return { min: mn - pad, max: mx + pad };\r\n}\r\n\r\nfunction vRange(v0, a, tM) {\r\n  var mn = Math.min(v0, calcV(tM, v0, a));\r\n  var mx = Math.max(v0, calcV(tM, v0, a));\r\n  var pad = Math.max((mx - mn) * 0.15, 2.5);\r\n  return { min: mn - pad, max: mx + pad };\r\n}\r\n\r\nfunction findStop(v0, a, tM) {\r\n  if (a === 0) return null;\r\n  var ts = -v0 \/ a;\r\n  return (ts > 0.001 && ts < tM - 0.001) ? ts : null;\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ UTILIDADES\r\n\/\/ =====================================================================\r\nfunction fmt(n, d) { d = d || 2; return Number(n).toFixed(d); }\r\n\r\nvar toastTO;\r\nfunction showToast(msg) {\r\n  var el = document.getElementById('toast');\r\n  el.textContent = msg;\r\n  el.classList.add('show');\r\n  clearTimeout(toastTO);\r\n  toastTO = setTimeout(function() { el.classList.remove('show'); }, 2600);\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ CANVAS\r\n\/\/ =====================================================================\r\nfunction initCanvas() {\r\n  canvas = document.getElementById('simCanvas');\r\n  ctx = canvas.getContext('2d');\r\n  resizeCanvas();\r\n}\r\n\r\nfunction resizeCanvas() {\r\n  var r = canvas.parentElement.getBoundingClientRect();\r\n  dpr = window.devicePixelRatio || 1;\r\n  canvas.width = r.width * dpr;\r\n  canvas.height = r.height * dpr;\r\n  canvas.style.width = r.width + 'px';\r\n  canvas.style.height = r.height + 'px';\r\n  cW = r.width; cH = r.height;\r\n  ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\r\n}\r\n\r\nfunction getDraw() {\r\n  var m = CFG.margin;\r\n  var dW = cW - m.l - m.r;\r\n  var dH = cH - m.t - m.b;\r\n  var trY = m.t + dH * 0.6;\r\n  var xR = xRange(sim.x0, sim.v0, sim.a, sim.tMax);\r\n  var xSp = xR.max - xR.min;\r\n  var ppm = dW \/ xSp;\r\n  function xPx(v) { return m.l + (v - xR.min) * ppm; }\r\n  return { m: m, dW: dW, dH: dH, trY: trY, xR: xR, xSp: xSp, ppm: ppm, xPx: xPx };\r\n}\r\n\r\nfunction drawScene() {\r\n  ctx.clearRect(0, 0, cW, cH);\r\n  var dp = getDraw();\r\n  var m = dp.m, trY = dp.trY, xPx = dp.xPx, xR = dp.xR;\r\n  var font = getComputedStyle(document.body).fontFamily;\r\n\r\n  ctx.fillStyle = '#fafbfc';\r\n  ctx.fillRect(0, 0, cW, cH);\r\n\r\n  var xSp = dp.xSp;\r\n  var step = 1;\r\n  if (xSp > 200) step = 20;\r\n  else if (xSp > 100) step = 10;\r\n  else if (xSp > 50) step = 5;\r\n  else if (xSp > 20) step = 2;\r\n  var st = Math.ceil(xR.min \/ step) * step;\r\n  ctx.font = 'bold 11px ' + font;\r\n  ctx.textAlign = 'center';\r\n  for (var val = st; val <= xR.max; val += step) {\r\n    var px = xPx(val);\r\n    if (px < m.l - 8 || px > cW - m.r + 8) continue;\r\n    ctx.strokeStyle = CFG.col.grid; ctx.lineWidth = 1;\r\n    ctx.beginPath(); ctx.moveTo(px, m.t); ctx.lineTo(px, trY + 12); ctx.stroke();\r\n    ctx.strokeStyle = '#9ca3af';\r\n    ctx.beginPath(); ctx.moveTo(px, trY - 5); ctx.lineTo(px, trY + 5); ctx.stroke();\r\n    ctx.fillStyle = '#1a1a2e';\r\n    ctx.font = 'bold 11px ' + font;\r\n    ctx.fillText(fmt(val, step < 1 ? 1 : 0), px, trY + 22);\r\n    ctx.font = '11px ' + font;\r\n  }\r\n  ctx.textAlign = 'start';\r\n\r\n  var tL = m.l - 10, tR = cW - m.r + 10;\r\n  ctx.fillStyle = '#e5e7eb';\r\n  ctx.fillRect(tL, trY + CFG.wheelR + 2, tR - tL, 5);\r\n  ctx.strokeStyle = CFG.col.axis; ctx.lineWidth = 2;\r\n  ctx.beginPath(); ctx.moveTo(tL, trY); ctx.lineTo(tR, trY); ctx.stroke();\r\n  ctx.fillStyle = CFG.col.axis;\r\n  ctx.beginPath(); ctx.moveTo(tR, trY); ctx.lineTo(tR - 12, trY - 6); ctx.lineTo(tR - 12, trY + 6); ctx.closePath(); ctx.fill();\r\n  ctx.fillStyle = '#1a1a2e';\r\n  ctx.font = 'bold 14px ' + font; ctx.fillText('x', tR - 2, trY - 12);\r\n\r\n  var oPx = xPx(0);\r\n  if (oPx >= tL && oPx <= tR) {\r\n    ctx.strokeStyle = CFG.col.origin; ctx.lineWidth = 2.5;\r\n    ctx.beginPath(); ctx.moveTo(oPx, trY - 16); ctx.lineTo(oPx, trY + 16); ctx.stroke();\r\n    ctx.fillStyle = CFG.col.origin;\r\n    ctx.font = 'bold 13px ' + font;\r\n    ctx.textAlign = 'center'; ctx.fillText('0', oPx, trY + 32); ctx.textAlign = 'start';\r\n  }\r\n\r\n  var x0Px = xPx(sim.x0);\r\n  if (x0Px >= tL && x0Px <= tR) {\r\n    drawMark(x0Px, trY, 'x\u2080 = ' + fmt(sim.x0, 1), CFG.col.x0Mark, true, font);\r\n  }\r\n\r\n  var tStop = findStop(sim.v0, sim.a, sim.tMax);\r\n  if (tStop !== null && sim.t >= tStop) {\r\n    var xS = calcX(tStop, sim.x0, sim.v0, sim.a);\r\n    var xSPx = xPx(xS);\r\n    if (xSPx >= tL && xSPx <= tR) {\r\n      drawMark(xSPx, trY, 'retorno', CFG.col.retMark, false, font);\r\n    }\r\n  }\r\n\r\n  if (cmp.showA && cmp.a) {\r\n    var xA = calcX(sim.t, cmp.a.x0, cmp.a.v0, cmp.a.a);\r\n    drawCar(xPx(xA), trY, calcV(sim.t, cmp.a.v0, cmp.a.a), true);\r\n  }\r\n  if (cmp.showB && cmp.b) {\r\n    var xB = calcX(sim.t, cmp.b.x0, cmp.b.v0, cmp.b.a);\r\n    drawCar(xPx(xB), trY, calcV(sim.t, cmp.b.v0, cmp.b.a), true);\r\n  }\r\n\r\n  if (sim.showTrail && gData.t.length > 1) {\r\n    var tc = Math.min(gData.t.length, CFG.trailLen);\r\n    var si = gData.t.length - tc;\r\n    for (var i = si; i < gData.t.length; i++) {\r\n      var al = ((i - si) \/ tc) * 0.45;\r\n      var px = xPx(gData.x[i]);\r\n      if (px >= tL && px <= tR) {\r\n        ctx.fillStyle = 'rgba(13,115,119,' + al + ')';\r\n        ctx.beginPath(); ctx.arc(px, trY - CFG.carH - 2, 3.5, 0, Math.PI * 2); ctx.fill();\r\n      }\r\n    }\r\n  }\r\n\r\n  var curX = calcX(sim.t, sim.x0, sim.v0, sim.a);\r\n  var curV = calcV(sim.t, sim.v0, sim.a);\r\n  drawCar(xPx(curX), trY, curV, false);\r\n\r\n  var vY = trY - CFG.carH - CFG.carTopH - 10;\r\n  if (sim.showVel) drawVec(ctx, xPx(curX), vY, curV * CFG.vecScaleV, CFG.col.vel, 'v');\r\n  if (sim.showAcc && sim.a !== 0) drawVec(ctx, xPx(curX), vY - 22, sim.a * CFG.vecScaleA, CFG.col.acc, 'a');\r\n\r\n  ctx.fillStyle = CFG.col.pos;\r\n  ctx.font = 'bold 12px ' + font;\r\n  ctx.textAlign = 'center';\r\n  ctx.fillText('x = ' + fmt(curX) + ' m', xPx(curX), trY + CFG.wheelR + 26);\r\n  ctx.textAlign = 'start';\r\n}\r\n\r\nfunction drawMark(px, trY, lbl, col, above, font) {\r\n  ctx.fillStyle = col;\r\n  ctx.font = 'bold 11px ' + font;\r\n  ctx.textAlign = 'center';\r\n  var yOff = above ? trY + CFG.wheelR + 42 : trY - CFG.carH - CFG.carTopH - 34;\r\n  ctx.fillText(lbl, px, yOff);\r\n  var tipY = above ? trY + CFG.wheelR + 22 : trY - CFG.carH - CFG.carTopH - 18;\r\n  ctx.beginPath();\r\n  ctx.moveTo(px, tipY);\r\n  ctx.lineTo(px - 5, tipY + (above ? 8 : -8));\r\n  ctx.lineTo(px + 5, tipY + (above ? 8 : -8));\r\n  ctx.closePath(); ctx.fill();\r\n  ctx.textAlign = 'start';\r\n}\r\n\r\nfunction drawCar(px, trY, vel, isCmp) {\r\n  var w = CFG.carW, h = CFG.carH, th = CFG.carTopH, wr = CFG.wheelR;\r\n  var dir = vel >= 0 ? 1 : -1;\r\n  var bc = isCmp ? CFG.col.cmp : CFG.col.car;\r\n  var dk = isCmp ? '#5c1380' : CFG.col.carDk;\r\n  ctx.save();\r\n  ctx.translate(px, trY - wr);\r\n  if (dir < 0) ctx.scale(-1, 1);\r\n\r\n  ctx.fillStyle = 'rgba(0,0,0,0.08)';\r\n  ctx.beginPath(); ctx.ellipse(0, wr + 3, w \/ 2 + 2, 4, 0, 0, Math.PI * 2); ctx.fill();\r\n  ctx.fillStyle = bc; rRect(ctx, -w\/2, -h, w, h, 5); ctx.fill();\r\n  ctx.fillStyle = dk;\r\n  ctx.beginPath();\r\n  ctx.moveTo(-w\/2 + 8, -h); ctx.lineTo(-w\/2 + 14, -h - th);\r\n  ctx.lineTo(w\/2 - 10, -h - th); ctx.lineTo(w\/2 - 4, -h);\r\n  ctx.closePath(); ctx.fill();\r\n  ctx.fillStyle = isCmp ? '#f3e5f5' : CFG.col.win;\r\n  ctx.beginPath();\r\n  ctx.moveTo(-w\/2 + 11, -h - 1); ctx.lineTo(-w\/2 + 16, -h - th + 3);\r\n  ctx.lineTo(w\/2 - 12, -h - th + 3); ctx.lineTo(w\/2 - 7, -h - 1);\r\n  ctx.closePath(); ctx.fill();\r\n  ctx.fillStyle = '#fbbf24'; ctx.fillRect(w\/2 - 3, -h + 4, 3, 5);\r\n  ctx.fillStyle = CFG.col.wheel;\r\n  ctx.beginPath(); ctx.arc(-w\/2 + 10, 0, wr, 0, Math.PI * 2); ctx.fill();\r\n  ctx.beginPath(); ctx.arc(w\/2 - 10, 0, wr, 0, Math.PI * 2); ctx.fill();\r\n  ctx.fillStyle = CFG.col.hub;\r\n  ctx.beginPath(); ctx.arc(-w\/2 + 10, 0, wr * 0.4, 0, Math.PI * 2); ctx.fill();\r\n  ctx.beginPath(); ctx.arc(w\/2 - 10, 0, wr * 0.4, 0, Math.PI * 2); ctx.fill();\r\n\r\n  ctx.restore();\r\n}\r\n\r\nfunction drawVec(c, sx, sy, len, col, lbl) {\r\n  if (Math.abs(len) < 1) return;\r\n  var cl = Math.sign(len) * Math.min(Math.abs(len), 140);\r\n  var ex = sx + cl;\r\n  var d = Math.sign(cl);\r\n  var hl = 9;\r\n  var font = getComputedStyle(document.body).fontFamily;\r\n  ctx.save();\r\n  ctx.strokeStyle = col; ctx.fillStyle = col;\r\n  ctx.lineWidth = 3; ctx.lineCap = 'round';\r\n  ctx.beginPath(); ctx.moveTo(sx, sy); ctx.lineTo(ex - d * hl, sy); ctx.stroke();\r\n  ctx.beginPath();\r\n  ctx.moveTo(ex, sy); ctx.lineTo(ex - d * hl, sy - 6); ctx.lineTo(ex - d * hl, sy + 6);\r\n  ctx.closePath(); ctx.fill();\r\n  ctx.font = 'bold 12px ' + font;\r\n  ctx.textAlign = 'center';\r\n  ctx.fillText(lbl, (sx + ex) \/ 2, sy - 11);\r\n  ctx.textAlign = 'start';\r\n  ctx.restore();\r\n}\r\n\r\nfunction rRect(c, x, y, w, h, r) {\r\n  r = Math.max(0, Math.min(r, Math.min(w, h) \/ 2));\r\n  c.beginPath();\r\n  c.moveTo(x + r, y); c.lineTo(x + w - r, y);\r\n  c.arcTo(x + w, y, x + w, y + r, r);\r\n  c.lineTo(x + w, y + h - r); c.arcTo(x + w, y + h, x + w - r, y + h, r);\r\n  c.lineTo(x + r, y + h); c.arcTo(x, y + h, x, y + h - r, r);\r\n  c.lineTo(x, y + r); c.arcTo(x, y, x + r, y, r);\r\n  c.closePath();\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ CHART.JS \u2013 Gr\u00e1ficas mejoradas\r\n\/\/ =====================================================================\r\n\r\nvar vLinePlugin = {\r\n  id: 'vLine',\r\n  afterDraw: function(chart) {\r\n    var xv = chart.options.plugins.vLineVal;\r\n    if (xv === undefined || xv === null) return;\r\n    var xs = chart.scales.x, ys = chart.scales.y;\r\n    var cx = xs.getPixelForValue(xv);\r\n    var cc = chart.ctx;\r\n    cc.save();\r\n    cc.strokeStyle = 'rgba(0,0,0,0.25)'; cc.lineWidth = 1; cc.setLineDash([4, 4]);\r\n    cc.beginPath(); cc.moveTo(cx, ys.top); cc.lineTo(cx, ys.bottom); cc.stroke();\r\n    if (chart.data.datasets[0] && chart.data.datasets[0].data.length > 0) {\r\n      var data = chart.data.datasets[0].data;\r\n      var closest = data[0], md = Math.abs(data[0].x - xv);\r\n      for (var i = 1; i < data.length; i++) {\r\n        var d = Math.abs(data[i].x - xv);\r\n        if (d < md) { md = d; closest = data[i]; }\r\n      }\r\n      var yPx = ys.getPixelForValue(closest.y);\r\n      cc.setLineDash([]);\r\n      cc.fillStyle = chart.data.datasets[0].borderColor || '#333';\r\n      cc.beginPath(); cc.arc(cx, yPx, 5, 0, Math.PI * 2); cc.fill();\r\n      cc.strokeStyle = '#fff'; cc.lineWidth = 2; cc.stroke();\r\n    }\r\n    cc.restore();\r\n  }\r\n};\r\nChart.register(vLinePlugin);\r\n\r\nfunction makeChart(id, label, color, yLbl) {\r\n  return new Chart(document.getElementById(id).getContext('2d'), {\r\n    type: 'line',\r\n    data: {\r\n      datasets: [\r\n        {\r\n          label: label, data: [], borderColor: color,\r\n          backgroundColor: color + '18', fill: false,\r\n          pointRadius: 0, borderWidth: 2.8, tension: 0.1\r\n        },\r\n        {\r\n          label: 'Exp. A', data: [], borderColor: CFG.col.pos,\r\n          backgroundColor: 'transparent', borderDash: [6, 4],\r\n          pointRadius: 0, borderWidth: 2, tension: 0.1, hidden: true\r\n        },\r\n        {\r\n          label: 'Exp. B', data: [], borderColor: CFG.col.cmp,\r\n          backgroundColor: 'transparent', borderDash: [6, 4],\r\n          pointRadius: 0, borderWidth: 2, tension: 0.1, hidden: true\r\n        }\r\n      ]\r\n    },\r\n    options: {\r\n      responsive: true, maintainAspectRatio: false, animation: false,\r\n      interaction: { mode: 'nearest', axis: 'x', intersect: false },\r\n      onClick: function(evt, els, chart) {\r\n        var rect = chart.canvas.getBoundingClientRect();\r\n        var mx = evt.native.clientX - rect.left;\r\n        var tv = chart.scales.x.getValueForPixel(mx);\r\n        if (tv !== undefined && tv >= 0 && tv <= sim.tMax) {\r\n          setSimTime(tv); updateAll();\r\n        }\r\n      },\r\n      scales: {\r\n        x: {\r\n          type: 'linear',\r\n          title: { display: true, text: 't (s)', font: { size: 13, weight: '700', family: \"'Inter',sans-serif\" }, color: '#111827', padding: { top: 8 } },\r\n          min: 0, max: sim.tMax,\r\n          grid: { color: '#e5e7eb' },\r\n          ticks: { font: { size: 11, weight: '600', family: \"'JetBrains Mono',monospace\" }, color: '#374151', padding: 4 }\r\n        },\r\n        y: {\r\n          title: { display: true, text: yLbl, font: { size: 13, weight: '700', family: \"'Inter',sans-serif\" }, color: '#111827', padding: { bottom: 8 } },\r\n          grid: { color: '#e5e7eb' },\r\n          ticks: { font: { size: 11, weight: '600', family: \"'JetBrains Mono',monospace\" }, color: '#374151', padding: 4 }\r\n        }\r\n      },\r\n      plugins: {\r\n        legend: { display: false },\r\n        tooltip: {\r\n          backgroundColor: 'rgba(17,24,39,0.92)',\r\n          titleFont: { size: 12, weight: '700', family: \"'Inter',sans-serif\" },\r\n          bodyFont: { size: 12, weight: '600', family: \"'JetBrains Mono',monospace\" },\r\n          padding: 10,\r\n          cornerRadius: 8,\r\n          displayColors: true,\r\n          boxPadding: 4,\r\n          callbacks: {\r\n            title: function(items) { return 't = ' + fmt(items[0].parsed.x) + ' s'; },\r\n            label: function(item) { return item.dataset.label + ' = ' + fmt(item.parsed.y); }\r\n          }\r\n        }\r\n      },\r\n      vLineVal: 0\r\n    }\r\n  });\r\n}\r\n\r\nfunction initCharts() {\r\n  chartX = makeChart('chartX', 'x(t)', CFG.col.pos, 'x (m)');\r\n  chartV = makeChart('chartV', 'v(t)', CFG.col.vel, 'v (m\/s)');\r\n  chartA = makeChart('chartA', 'a(t)', CFG.col.acc, 'a (m\/s\u00b2)');\r\n  updateChartAxes();\r\n}\r\n\r\nfunction updateChartAxes() {\r\n  var xR = xRange(sim.x0, sim.v0, sim.a, sim.tMax);\r\n  var vR = vRange(sim.v0, sim.a, sim.tMax);\r\n  chartX.options.scales.x.max = sim.tMax;\r\n  chartX.options.scales.y.min = xR.min;\r\n  chartX.options.scales.y.max = xR.max;\r\n  chartV.options.scales.x.max = sim.tMax;\r\n  chartV.options.scales.y.min = vR.min;\r\n  chartV.options.scales.y.max = vR.max;\r\n  chartA.options.scales.x.max = sim.tMax;\r\n  chartA.options.scales.y.min = sim.a < 0 ? sim.a - 1 : -1;\r\n  chartA.options.scales.y.max = sim.a > 0 ? sim.a + 1 : 1;\r\n  if (sim.a === 0) { chartA.options.scales.y.min = -1; chartA.options.scales.y.max = 1; }\r\n  if (cmp.a) {\r\n    var xRA = xRange(cmp.a.x0, cmp.a.v0, cmp.a.a, sim.tMax);\r\n    var vRA = vRange(cmp.a.v0, cmp.a.a, sim.tMax);\r\n    chartX.options.scales.y.min = Math.min(chartX.options.scales.y.min, xRA.min);\r\n    chartX.options.scales.y.max = Math.max(chartX.options.scales.y.max, xRA.max);\r\n    chartV.options.scales.y.min = Math.min(chartV.options.scales.y.min, vRA.min);\r\n    chartV.options.scales.y.max = Math.max(chartV.options.scales.y.max, vRA.max);\r\n  }\r\n  if (cmp.b) {\r\n    var xRB = xRange(cmp.b.x0, cmp.b.v0, cmp.b.a, sim.tMax);\r\n    var vRB = vRange(cmp.b.v0, cmp.b.a, sim.tMax);\r\n    chartX.options.scales.y.min = Math.min(chartX.options.scales.y.min, xRB.min);\r\n    chartX.options.scales.y.max = Math.max(chartX.options.scales.y.max, xRB.max);\r\n    chartV.options.scales.y.min = Math.min(chartV.options.scales.y.min, vRB.min);\r\n    chartV.options.scales.y.max = Math.max(chartV.options.scales.y.max, vRB.max);\r\n  }\r\n}\r\n\r\nfunction addGP(t) {\r\n  if (t <= lastGT) return;\r\n  var x = calcX(t, sim.x0, sim.v0, sim.a);\r\n  var v = calcV(t, sim.v0, sim.a);\r\n  gData.t.push(t); gData.x.push(x); gData.v.push(v); gData.a.push(sim.a);\r\n  lastGT = t;\r\n  chartX.data.datasets[0].data.push({ x: t, y: x });\r\n  chartV.data.datasets[0].data.push({ x: t, y: v });\r\n  chartA.data.datasets[0].data.push({ x: t, y: sim.a });\r\n}\r\n\r\nfunction rebuildGD() {\r\n  gData = { t: [], x: [], v: [], a: [] };\r\n  lastGT = -1;\r\n  chartX.data.datasets[0].data = [];\r\n  chartV.data.datasets[0].data = [];\r\n  chartA.data.datasets[0].data = [];\r\n  var t = 0;\r\n  while (t <= sim.t + 0.001) {\r\n    addGP(Math.min(t, sim.t));\r\n    t += CFG.dt;\r\n  }\r\n  if (sim.t > 0) addGP(sim.t);\r\n}\r\n\r\nfunction updateCharts() {\r\n  chartX.options.plugins.vLineVal = sim.t;\r\n  chartV.options.plugins.vLineVal = sim.t;\r\n  chartA.options.plugins.vLineVal = sim.t;\r\n  updateCmpGraphs();\r\n  chartX.update('none');\r\n  chartV.update('none');\r\n  chartA.update('none');\r\n}\r\n\r\nfunction updateCmpGraphs() {\r\n  [['a', cmp.a, 1], ['b', cmp.b, 2]].forEach(function(pair) {\r\n    var key = pair[0], cfg = pair[1], di = pair[2];\r\n    var dsX = chartX.data.datasets[di];\r\n    var dsV = chartV.data.datasets[di];\r\n    var dsA = chartA.data.datasets[di];\r\n    if (cmp['show' + key.toUpperCase()] && cfg) {\r\n      dsX.data = []; dsV.data = []; dsA.data = [];\r\n      for (var t = 0; t <= sim.tMax; t += CFG.dt) {\r\n        dsX.data.push({ x: t, y: calcX(t, cfg.x0, cfg.v0, cfg.a) });\r\n        dsV.data.push({ x: t, y: calcV(t, cfg.v0, cfg.a) });\r\n        dsA.data.push({ x: t, y: cfg.a });\r\n      }\r\n      dsX.data.push({ x: sim.tMax, y: calcX(sim.tMax, cfg.x0, cfg.v0, cfg.a) });\r\n      dsV.data.push({ x: sim.tMax, y: calcV(sim.tMax, cfg.v0, cfg.a) });\r\n      dsA.data.push({ x: sim.tMax, y: cfg.a });\r\n      dsX.hidden = false; dsV.hidden = false; dsA.hidden = false;\r\n    } else {\r\n      dsX.data = []; dsV.data = []; dsA.data = [];\r\n      dsX.hidden = true; dsV.hidden = true; dsA.hidden = true;\r\n    }\r\n  });\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ INFORMACI\u00d3N EN PANTALLA\r\n\/\/ =====================================================================\r\nfunction updateInfo() {\r\n  var x = calcX(sim.t, sim.x0, sim.v0, sim.a);\r\n  var v = calcV(sim.t, sim.v0, sim.a);\r\n  var dx = x - sim.x0;\r\n\r\n  document.getElementById('time-display').textContent = 't = ' + fmt(sim.t) + ' s';\r\n  document.getElementById('info-t').textContent = fmt(sim.t) + ' s';\r\n  document.getElementById('info-x').textContent = fmt(x) + ' m';\r\n  document.getElementById('info-v').textContent = fmt(v) + ' m\/s';\r\n  document.getElementById('info-a').textContent = fmt(sim.a) + ' m\/s\u00b2';\r\n  document.getElementById('info-dx').textContent = fmt(dx) + ' m';\r\n\r\n  var tStop = findStop(sim.v0, sim.a, sim.tMax);\r\n  var eb = document.getElementById('event-box');\r\n  var et = document.getElementById('event-title');\r\n  var ed = document.getElementById('event-detail');\r\n  if (tStop !== null && sim.t >= tStop - 0.1) {\r\n    var xS = calcX(tStop, sim.x0, sim.v0, sim.a);\r\n    eb.classList.add('visible');\r\n    et.textContent = sim.t >= tStop ? '\u25cf Cambio de sentido' : '\u25cf Acerc\u00e1ndose al punto de retorno';\r\n    ed.textContent = 'v = 0 en t = ' + fmt(tStop) + ' s, x = ' + fmt(xS) + ' m';\r\n  } else {\r\n    eb.classList.remove('visible');\r\n  }\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ ECUACIONES \u2013 HTML puro\r\n\/\/ =====================================================================\r\nfunction buildTerm(coeff, varHTML, isFirst) {\r\n  if (coeff === 0) return '';\r\n  var abs = Math.abs(coeff);\r\n  var s = isFirst ? (coeff < 0 ? '\u2212' : '') : (coeff > 0 ? ' + ' : ' \u2212 ');\r\n  return s + fmt(abs) + varHTML;\r\n}\r\n\r\nfunction updateEquations() {\r\n  var x0 = sim.x0, v0 = sim.v0, a = sim.a;\r\n  var elX = document.getElementById('eq-x');\r\n  var elV = document.getElementById('eq-v');\r\n  var elA = document.getElementById('eq-a');\r\n  var halfA = 0.5 * a;\r\n\r\n  var xHTML = '<span class=\"eq\">';\r\n  xHTML += '<span class=\"eq-var\">x<\/span>(<span class=\"eq-var\">t<\/span>) = ';\r\n  var first = true;\r\n  if (x0 !== 0) { xHTML += buildTerm(x0, '', true); first = false; }\r\n  if (v0 !== 0) { xHTML += buildTerm(v0, ' \u00b7 <span class=\"eq-var\">t<\/span>', first); first = false; }\r\n  if (a !== 0) { xHTML += buildTerm(halfA, ' \u00b7 <span class=\"eq-var\">t<\/span><span class=\"eq-sup\">2<\/span>', first); first = false; }\r\n  if (first) xHTML += '0';\r\n  xHTML += '<\/span> <span class=\"eq-unit\">[m]<\/span>';\r\n\r\n  var vHTML = '<span class=\"eq\">';\r\n  vHTML += '<span class=\"eq-var\">v<\/span>(<span class=\"eq-var\">t<\/span>) = ';\r\n  first = true;\r\n  if (v0 !== 0 || a === 0) { vHTML += fmt(v0); first = false; }\r\n  if (a !== 0) { vHTML += buildTerm(a, ' \u00b7 <span class=\"eq-var\">t<\/span>', first); }\r\n  vHTML += '<\/span> <span class=\"eq-unit\">[m\/s]<\/span>';\r\n\r\n  var aHTML = '<span class=\"eq\">';\r\n  aHTML += '<span class=\"eq-var\">a<\/span>(<span class=\"eq-var\">t<\/span>) = ' + fmt(a);\r\n  aHTML += '<\/span> <span class=\"eq-unit\">[m\/s\u00b2]<\/span>';\r\n\r\n  elX.innerHTML = xHTML;\r\n  elV.innerHTML = vHTML;\r\n  elA.innerHTML = aHTML;\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ CONTROLES DE SIMULACI\u00d3N\r\n\/\/ =====================================================================\r\nfunction setSimTime(t) {\r\n  sim.t = Math.max(0, Math.min(t, sim.tMax));\r\n  if (sim.t >= sim.tMax) {\r\n    sim.t = sim.tMax;\r\n    sim.playing = false;\r\n    sim.finished = true;\r\n  }\r\n  rebuildGD();\r\n}\r\n\r\nfunction play() {\r\n  if (sim.finished) resetSim();\r\n  sim.playing = true;\r\n  sim.lastTs = null;\r\n}\r\n\r\nfunction pause() {\r\n  sim.playing = false;\r\n}\r\n\r\nfunction resetSim() {\r\n  sim.t = 0; sim.playing = false; sim.finished = false; sim.lastTs = null;\r\n  gData = { t: [], x: [], v: [], a: [] };\r\n  lastGT = -1;\r\n  chartX.data.datasets[0].data = [];\r\n  chartV.data.datasets[0].data = [];\r\n  chartA.data.datasets[0].data = [];\r\n  addGP(0);\r\n  updateAll();\r\n}\r\n\r\nfunction stepFwd() {\r\n  if (sim.finished) return;\r\n  pause();\r\n  setSimTime(sim.t + CFG.stepSize);\r\n  updateAll();\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ PAR\u00c1METROS\r\n\/\/ =====================================================================\r\nfunction syncP(iId, key, min, max) {\r\n  var inp = document.getElementById(iId);\r\n  var upd = function(v) {\r\n    v = parseFloat(v);\r\n    if (isNaN(v)) return;\r\n    v = Math.max(min, Math.min(max, v));\r\n    sim[key] = v;\r\n    inp.value = v;\r\n    onParamChange();\r\n  };\r\n  inp.addEventListener('change', function() { upd(inp.value); });\r\n  inp.addEventListener('keydown', function(e) { if (e.key === 'Enter') inp.blur(); });\r\n}\r\n\r\nfunction onParamChange() {\r\n  updateChartAxes();\r\n  updateEquations();\r\n  resetSim();\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ PRESETS\r\n\/\/ =====================================================================\r\nfunction loadPreset(n) {\r\n  var p = PRESETS[n];\r\n  if (!p) return;\r\n  sim.x0 = p.x0; sim.v0 = p.v0; sim.a = p.a; sim.tMax = p.tMax;\r\n  document.getElementById('input-x0').value = p.x0;\r\n  document.getElementById('input-v0').value = p.v0;\r\n  document.getElementById('input-a').value = p.a;\r\n  document.getElementById('input-tmax').value = p.tMax;\r\n  onParamChange();\r\n  showToast('Preset cargado: ' + n);\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ MODO EXPERIMENTO\r\n\/\/ =====================================================================\r\nfunction regData() {\r\n  var x = calcX(sim.t, sim.x0, sim.v0, sim.a);\r\n  var v = calcV(sim.t, sim.v0, sim.a);\r\n  expData.push({ t: sim.t, x: x, v: v, a: sim.a });\r\n  renderTbl();\r\n  showToast('Dato registrado en t = ' + fmt(sim.t) + ' s');\r\n}\r\n\r\nfunction delLast() {\r\n  if (!expData.length) return;\r\n  expData.pop();\r\n  renderTbl();\r\n}\r\n\r\nfunction clearData() {\r\n  expData = [];\r\n  renderTbl();\r\n}\r\n\r\nfunction renderTbl() {\r\n  var tb = document.getElementById('data-tbody');\r\n  var tbl = document.getElementById('data-table');\r\n  var em = document.getElementById('empty-msg');\r\n  if (!expData.length) {\r\n    tbl.style.display = 'none'; em.style.display = 'block'; tb.innerHTML = '';\r\n    return;\r\n  }\r\n  tbl.style.display = 'table'; em.style.display = 'none';\r\n  tb.innerHTML = expData.map(function(d) {\r\n    return '<tr><td>' + fmt(d.t) + '<\/td><td>' + fmt(d.x) + '<\/td><td>' + fmt(d.v) + '<\/td><td>' + fmt(d.a) + '<\/td><\/tr>';\r\n  }).join('');\r\n}\r\n\r\nfunction exportCSV() {\r\n  if (!expData.length) { showToast('No hay datos'); return; }\r\n  var csv = 't (s);x (m);v (m\/s);a (m\/s\u00b2)\\n';\r\n  expData.forEach(function(d) {\r\n    csv += fmt(d.t) + ';' + fmt(d.x) + ';' + fmt(d.v) + ';' + fmt(d.a) + '\\n';\r\n  });\r\n  var b = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\r\n  var u = URL.createObjectURL(b);\r\n  var a = document.createElement('a');\r\n  a.href = u; a.download = 'mrua_datos.csv'; a.click();\r\n  URL.revokeObjectURL(u);\r\n  showToast('CSV exportado');\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ COMPARACI\u00d3N\r\n\/\/ =====================================================================\r\nfunction saveCmp(w) {\r\n  cmp[w] = { x0: sim.x0, v0: sim.v0, a: sim.a, tMax: sim.tMax };\r\n  cmp['show' + w.toUpperCase()] = true;\r\n  updateCmpDisplay();\r\n  updateChartAxes();\r\n  updateCharts();\r\n  showToast('Experimento ' + w.toUpperCase() + ' guardado');\r\n}\r\n\r\nfunction clearCmp() {\r\n  cmp = { a: null, b: null, showA: false, showB: false };\r\n  updateCmpDisplay();\r\n  updateChartAxes();\r\n  updateCharts();\r\n  showToast('Comparaci\u00f3n limpiada');\r\n}\r\n\r\nfunction updateCmpDisplay() {\r\n  var el = document.getElementById('cmp-display');\r\n  var h = '';\r\n  if (cmp.a) {\r\n    var c = cmp.a;\r\n    h += '<div style=\"font-size:0.78rem;margin-bottom:6px;padding:8px 12px;background:#e3f2fd;border-radius:6px;border-left:3px solid ' + CFG.col.pos + ';\"><b style=\"color:' + CFG.col.pos + ';\">Exp. A:<\/b> x\u2080=' + fmt(c.x0, 1) + ' m, v\u2080=' + fmt(c.v0, 1) + ' m\/s, a=' + fmt(c.a, 1) + ' m\/s\u00b2<\/div>';\r\n  }\r\n  if (cmp.b) {\r\n    var c = cmp.b;\r\n    h += '<div style=\"font-size:0.78rem;padding:8px 12px;background:#f3e5f5;border-radius:6px;border-left:3px solid ' + CFG.col.cmp + ';\"><b style=\"color:' + CFG.col.cmp + ';\">Exp. B:<\/b> x\u2080=' + fmt(c.x0, 1) + ' m, v\u2080=' + fmt(c.v0, 1) + ' m\/s, a=' + fmt(c.a, 1) + ' m\/s\u00b2<\/div>';\r\n  }\r\n  if (!cmp.a && !cmp.b) {\r\n    h = '<span style=\"font-size:0.78rem;color:var(--text-muted);font-weight:500;\">Sin experimentos guardados.<\/span>';\r\n  }\r\n  el.innerHTML = h;\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ ACTUALIZACI\u00d3N GENERAL Y LOOP\r\n\/\/ =====================================================================\r\nfunction updateAll() {\r\n  drawScene();\r\n  updateCharts();\r\n  updateInfo();\r\n}\r\n\r\nfunction animLoop(ts) {\r\n  if (sim.playing) {\r\n    if (sim.lastTs === null) sim.lastTs = ts;\r\n    var dt = (ts - sim.lastTs) \/ 1000;\r\n    sim.lastTs = ts;\r\n    sim.t += dt * sim.speed;\r\n    if (sim.t >= sim.tMax) {\r\n      sim.t = sim.tMax;\r\n      sim.playing = false;\r\n      sim.finished = true;\r\n    }\r\n    var np = Math.floor(sim.t \/ CFG.dt) + 1;\r\n    while (gData.t.length < np && lastGT < sim.t) {\r\n      var nt = lastGT + CFG.dt;\r\n      if (nt <= sim.t) addGP(nt);\r\n      else { addGP(sim.t); break; }\r\n    }\r\n  } else {\r\n    sim.lastTs = null;\r\n  }\r\n  updateAll();\r\n  requestAnimationFrame(animLoop);\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ EVENT LISTENERS\r\n\/\/ =====================================================================\r\nfunction initEvents() {\r\n  document.getElementById('btn-play').addEventListener('click', play);\r\n  document.getElementById('btn-pause').addEventListener('click', pause);\r\n  document.getElementById('btn-reset').addEventListener('click', resetSim);\r\n  document.getElementById('btn-step').addEventListener('click', stepFwd);\r\n\r\n  document.querySelectorAll('.speed-btn').forEach(function(b) {\r\n    b.addEventListener('click', function() {\r\n      document.querySelectorAll('.speed-btn').forEach(function(x) { x.classList.remove('active'); });\r\n      b.classList.add('active');\r\n      sim.speed = parseFloat(b.dataset.speed);\r\n    });\r\n  });\r\n\r\n  syncP('input-x0', 'x0', -50, 50);\r\n  syncP('input-v0', 'v0', -20, 20);\r\n  syncP('input-a', 'a', -10, 10);\r\n  syncP('input-tmax', 'tMax', 2, 30);\r\n\r\n  document.querySelectorAll('.preset-btn').forEach(function(b) {\r\n    b.addEventListener('click', function() { loadPreset(b.dataset.preset); });\r\n  });\r\n\r\n  document.getElementById('chk-vel').addEventListener('change', function(e) { sim.showVel = e.target.checked; });\r\n  document.getElementById('chk-acc').addEventListener('change', function(e) { sim.showAcc = e.target.checked; });\r\n  document.getElementById('chk-trail').addEventListener('change', function(e) { sim.showTrail = e.target.checked; });\r\n\r\n  document.getElementById('btn-register').addEventListener('click', regData);\r\n  document.getElementById('btn-delete-last').addEventListener('click', delLast);\r\n  document.getElementById('btn-clear-data').addEventListener('click', clearData);\r\n  document.getElementById('btn-export-csv').addEventListener('click', exportCSV);\r\n\r\n  document.getElementById('btn-save-a').addEventListener('click', function() { saveCmp('a'); });\r\n  document.getElementById('btn-save-b').addEventListener('click', function() { saveCmp('b'); });\r\n  document.getElementById('btn-clear-cmp').addEventListener('click', clearCmp);\r\n\r\n  var pedOverlay = document.getElementById('ped-overlay');\r\n  document.getElementById('ped-header').addEventListener('click', function() {\r\n    pedOverlay.classList.add('open');\r\n  });\r\n  document.getElementById('ped-close').addEventListener('click', function() {\r\n    pedOverlay.classList.remove('open');\r\n  });\r\n  pedOverlay.addEventListener('click', function(e) {\r\n    if (e.target === pedOverlay) pedOverlay.classList.remove('open');\r\n  });\r\n\r\n  document.addEventListener('keydown', function(e) {\r\n    if (e.target.tagName === 'INPUT') return;\r\n    if (e.code === 'Space') { e.preventDefault(); sim.playing ? pause() : play(); }\r\n    if (e.code === 'ArrowRight') { e.preventDefault(); stepFwd(); }\r\n    if (e.code === 'KeyR') { e.preventDefault(); resetSim(); }\r\n  });\r\n\r\n  window.addEventListener('resize', function() { resizeCanvas(); updateAll(); });\r\n}\r\n\r\n\/\/ =====================================================================\r\n\/\/ INICIALIZACI\u00d3N\r\n\/\/ =====================================================================\r\nfunction init() {\r\n  initCanvas();\r\n  initCharts();\r\n  initEvents();\r\n  addGP(0);\r\n  updateEquations();\r\n  updateAll();\r\n  requestAnimationFrame(animLoop);\r\n}\r\n\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', init);\r\n} else {\r\n  init();\r\n}\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FISAR_SIM \u2013 MRU\/MRUA | FICA \u2013 UNSL FICA \u2013 Universidad Nacional de San Luis Cinem\u00e1tica. Movimiento Rectil\u00edneo MRU y MRUA Exploraci\u00f3n interactiva de la posici\u00f3n,&hellip;<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-8765","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2\" \/>\n<meta property=\"og:description\" content=\"FISAR_SIM \u2013 MRU\/MRUA | FICA \u2013 UNSL FICA \u2013 Universidad Nacional de San Luis Cinem\u00e1tica. Movimiento Rectil\u00edneo MRU y MRUA Exploraci\u00f3n interactiva de la posici\u00f3n,&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/\" \/>\n<meta property=\"og:site_name\" content=\"F\u00edsica 2\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-22T01:35:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/\",\"url\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/\",\"name\":\"movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/FISAR_SIM_2.png\",\"datePublished\":\"2026-08-22T00:31:26+00:00\",\"dateModified\":\"2026-08-22T01:35:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/#breadcrumb\"},\"inLanguage\":\"es-AR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es-AR\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/FISAR_SIM_2.png\",\"contentUrl\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/FISAR_SIM_2.png\",\"width\":952,\"height\":306},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/index.php\\\/movimiento_mru_mrua_borrador_prueba\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"movimiento_MRU_MRUA_borrador_prueba\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#website\",\"url\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/\",\"name\":\"F\u00edsica 2\",\"description\":\"FICA - UNSL\",\"publisher\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-AR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#organization\",\"name\":\"SAC- Secretar\u00eda General FICA\",\"url\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-AR\",\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/SG-Logo.png\",\"contentUrl\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/SG-Logo.png\",\"width\":4483,\"height\":1231,\"caption\":\"SAC- Secretar\u00eda General FICA\"},\"image\":{\"@id\":\"https:\\\/\\\/fisica2.fica.unsl.edu.ar\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/","og_locale":"es_ES","og_type":"article","og_title":"movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2","og_description":"FISAR_SIM \u2013 MRU\/MRUA | FICA \u2013 UNSL FICA \u2013 Universidad Nacional de San Luis Cinem\u00e1tica. Movimiento Rectil\u00edneo MRU y MRUA Exploraci\u00f3n interactiva de la posici\u00f3n,&hellip;","og_url":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/","og_site_name":"F\u00edsica 2","article_modified_time":"2026-08-22T01:35:20+00:00","og_image":[{"url":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/","url":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/","name":"movimiento_MRU_MRUA_borrador_prueba - F\u00edsica 2","isPartOf":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/#primaryimage"},"image":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/#primaryimage"},"thumbnailUrl":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png","datePublished":"2026-08-22T00:31:26+00:00","dateModified":"2026-08-22T01:35:20+00:00","breadcrumb":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/#breadcrumb"},"inLanguage":"es-AR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/"]}]},{"@type":"ImageObject","inLanguage":"es-AR","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/#primaryimage","url":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png","contentUrl":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2026\/08\/FISAR_SIM_2.png","width":952,"height":306},{"@type":"BreadcrumbList","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/movimiento_mru_mrua_borrador_prueba\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/fisica2.fica.unsl.edu.ar\/"},{"@type":"ListItem","position":2,"name":"movimiento_MRU_MRUA_borrador_prueba"}]},{"@type":"WebSite","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#website","url":"https:\/\/fisica2.fica.unsl.edu.ar\/","name":"F\u00edsica 2","description":"FICA - UNSL","publisher":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fisica2.fica.unsl.edu.ar\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-AR"},{"@type":"Organization","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#organization","name":"SAC- Secretar\u00eda General FICA","url":"https:\/\/fisica2.fica.unsl.edu.ar\/","logo":{"@type":"ImageObject","inLanguage":"es-AR","@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#\/schema\/logo\/image\/","url":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png","contentUrl":"https:\/\/fisica2.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png","width":4483,"height":1231,"caption":"SAC- Secretar\u00eda General FICA"},"image":{"@id":"https:\/\/fisica2.fica.unsl.edu.ar\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/8765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/comments?post=8765"}],"version-history":[{"count":13,"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/8765\/revisions"}],"predecessor-version":[{"id":8780,"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/8765\/revisions\/8780"}],"wp:attachment":[{"href":"https:\/\/fisica2.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/media?parent=8765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}