<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数学函数自动作图工具</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="app-container">
<aside class="sidebar">
<div class="sidebar-header">
<h1>📐 函数作图</h1>
<p class="subtitle">输入数学函数,自动绘制曲线</p>
</div>
<div class="function-list" id="functionList">
</div>
<button class="btn-add" id="btnAddFunction">
+ 添加函数
</button>
<div class="presets">
<h3>快速预设</h3>
<div class="preset-grid">
<button class="preset-btn" data-fn="sin(x)">sin(x)</button>
<button class="preset-btn" data-fn="cos(x)">cos(x)</button>
<button class="preset-btn" data-fn="tan(x)">tan(x)</button>
<button class="preset-btn" data-fn="x^2">x²</button>
<button class="preset-btn" data-fn="x^3">x³</button>
<button class="preset-btn" data-fn="sqrt(x)">√x</button>
<button class="preset-btn" data-fn="log(x)">ln(x)</button>
<button class="preset-btn" data-fn="exp(x)">eˣ</button>
<button class="preset-btn" data-fn="abs(x)">|x|</button>
<button class="preset-btn" data-fn="1/x">1/x</button>
<button class="preset-btn" data-fn="sin(x)/x">sin(x)/x</button>
<button class="preset-btn" data-fn="x*sin(x)">x·sin(x)</button>
</div>
</div>
<div class="controls">
<h3>视图控制</h3>
<div class="control-row">
<label>X 范围:</label>
<input type="number" id="xRange" value="10" min="1" max="100" step="1">
</div>
<div class="control-row">
<label>精度:</label>
<input type="range" id="precision" value="1" min="0.1" max="5" step="0.1">
<span id="precisionValue">1</span>
</div>
<div class="control-row">
<label>网格:</label>
<input type="checkbox" id="showGrid" checked>
</div>
<div class="control-row">
<label>坐标轴:</label>
<input type="checkbox" id="showAxes" checked>
</div>
<button class="btn-reset" id="btnReset">重置视图</button>
</div>
<div class="help-section">
<h3>使用说明</h3>
<ul>
<li><b>支持的函数:</b> sin, cos, tan, asin, acos, atan, log, exp, sqrt, abs, pow</li>
<li><b>运算符:</b> + - * / ^ ( )</li>
<li><b>常量:</b> pi (π), e</li>
<li><b>操作:</b> 滚轮缩放,拖拽平移</li>
<li><b>示例:</b> 2*sin(x)+cos(2*x)</li>
</ul>
</div>
</aside>
<main class="canvas-area">
<canvas id="graphCanvas"></canvas>
<div class="canvas-info" id="canvasInfo">
<span class="info-item">缩放: <b id="zoomLevel">100%</b></span>
<span class="info-item">中心: (<b id="centerX">0</b>, <b id="centerY">0</b>)</span>
<span class="info-item">鼠标: (<b id="mouseX">-</b>, <b id="mouseY">-</b>)</span>
</div>
</main>
</div>
<script src="script.js"></script>
</body>
</html>