正十七边形尺规作图证明——从高斯的发现到几何实现

正十七边形尺规作图证明——从高斯的发现到几何实现

1. 引言:一个历史性的数学突破

在欧几里得几何中,尺规作图(仅使用直尺和圆规)是最为基础的几何构造方法。古希腊数学家已知如何构造正三角形、正方形和正五边形,但在此之后的正多边形尺规作图问题成为了一个长期悬而未决的数学挑战。

直到1796年,年仅19岁的德国数学天才卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在其著名的日记中写下了一个划时代的发现:正十七边形可以用尺规作图精确构造。这一结果不仅令当时的数学界震惊,更开创了代数结构理论的新篇章。

2. 可构造性的理论基础

高斯的发现并非偶然。他通过深入研究分圆方程,揭示了一个普遍规律:

定理:正n边形可以用尺规作图的充要条件是n可以表示为:
n = 2 k × p 1 × p 2 × ⋯ × p m n = 2^k \times p_1 \times p_2 \times \cdots \times p_m n=2k×p1×p2××pm
其中 p i p_i pi均为不同的费马素数(形如 F n = 2 2 n + 1 F_n = 2^{2^n}+1 Fn=22n+1的素数)。

由于17 = 2 2 2 + 1 = F 2 + 1 2^{2^2}+1 = F_2 + 1 222+1=F2+1是一个费马素数,所以正十七边形可以用尺规作图构造。

3. 高斯的代数证明思路

高斯的证明是通过代数方法进行的,其核心是将复杂的问题分解为更简单的子问题:

  1. 问题转化:构造正十七边形等价于能够精确构造 cos ⁡ ( 2 π 17 ) \cos(\frac{2\pi}{17}) cos(172π)

  2. 分圆多项式:找到 x = cos ⁡ ( 2 π 17 ) x = \cos(\frac{2\pi}{17}) x=cos(172π)所满足的代数方程,即第17阶分圆多项式。

  3. 方程分解:高斯的天才之处在于,他发现这个16次方程可以被分解为一系列嵌套的二次方程。

  4. 构造过程:每个二次方程对应于几何中的一次"开平方"操作,而这恰好可以通过尺规作图实现。

简化来说,高斯证明了 cos ⁡ ( 2 π 17 ) \cos(\frac{2\pi}{17}) cos(172π)可以用嵌套的平方根表示:

cos ⁡ ( 2 π 17 ) = − 1 + 17 + 34 − 2 17 + 2 17 + 3 17 − 34 − 2 17 − 2 34 + 2 17 16 \cos(\frac{2\pi}{17}) = \frac{-1 + \sqrt{17} + \sqrt{34 - 2\sqrt{17}} + 2\sqrt{17 + 3\sqrt{17} - \sqrt{34 - 2\sqrt{17}} - 2\sqrt{34 + 2\sqrt{17}}}}{16} cos(172π)=161+17 +34217 +217+317 34217 234+217

这个表达式虽然复杂,但只涉及有理运算和开平方,因此可以用尺规作图实现。

4. 思维导图:证明结构可视化

下面的思维导图展示了正十七边形尺规作图证明的逻辑结构:

正十七边形尺规作图问题
代数分析
几何实现
构造cos(2π/17)
17阶分圆多项式
高斯分解为嵌套二次方程
证明存在尺规构造解
几何步骤设计
单位圆构造
特殊点确定
垂直平分线作法
确定正十七边形顶点

5. 几何实现:Richmond方法

有多种方法可以实现正十七边形的尺规作图,下面介绍的Richmond方法是比较经典的一种。具体步骤如下:

基本构造过程

  1. 画一个单位圆O,标记圆心为O。
  2. 画水平直径AB和垂直直径CD
  3. 在水平半径OA上取点E,使OE = 1/4 OA。
  4. 以E为圆心、EA为半径画圆,交垂直直径于F和G。
  5. 连接EF和EG,延长EF交单位圆于H。
  6. 作FH的垂直平分线,交单位圆于I和J。
  7. 点I和J即为正十七边形的两个顶点
  8. 用圆规在单位圆上等分出其余顶点
  9. 连接所有顶点,完成正十七边形。

这个作图方法看似简单,但其背后的数学原理极其深刻。每一步操作都精确对应了高斯代数公式中的一部分运算。

6. 代数与几何的对应关系

让我们看一下几何操作与代数计算之间的对应关系:

几何操作代数意义
单位圆构造设定单位长度,准备角度测量
在OA上取点E (OE=OA/4)对应于公式中的常数项
作以E为圆心的圆实现首次"开平方"操作
延长EF至H实现代数式中的"加法"
作FH的垂直平分线对应于公式中的第二次"开平方"
得到点I和J确定第一个角度 cos ⁡ ( 2 π 17 ) \cos(\frac{2\pi}{17}) cos(172π)

每一步几何操作都有精确的代数对应,这种对应关系的发现是高斯天才的体现。

7. 交互式演示工具

为了直观展示正十七边形的尺规作图过程,我创建了一个交互式网页应用。通过这个工具,您可以逐步观察作图过程,理解每一步的几何意义:

这个演示工具允许您:

  • 逐步进行作图,了解每一步的具体操作
  • 观察关键点(O, A, B, C, D, E, F, G, H, I, J)的确定过程
  • 最终看到完整的正十七边形呈现
  • 以下是完整代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8" /><title>正十七边形尺规作图演示</title><script src="https://cdn.tailwindcss.com"></script><style>body {font-family: 'Microsoft YaHei', 'SimHei', sans-serif;}canvas {display: block;background-color: white;}.step-container {max-height: 240px;overflow-y: auto;}</style>
</head>
<body class="bg-gray-50"><div class="container mx-auto py-8 px-4"><h1 class="text-3xl font-bold text-center text-indigo-700 mb-8">正十七边形尺规作图演示</h1><!-- 主要布局 --><div class="bg-white rounded-lg shadow-lg p-4 flex flex-col lg:flex-row"><!-- 左侧:画布区域 --><div class="lg:w-2/3 p-2 flex flex-col items-center"><canvasid="constructionCanvas"width="600"height="600"class="border border-gray-200 rounded-md mb-4"></canvas><!-- 控制按钮 --><div class="flex space-x-4"><buttonid="prevBtn"class="px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700 disabled:bg-gray-400 disabled:cursor-not-allowed">上一步</button><buttonid="playBtn"class="px-4 py-2 bg-green-600 text-white rounded-md hover:bg-green-700">播放</button><buttonid="pauseBtn"class="px-4 py-2 bg-yellow-600 text-white rounded-md hover:bg-yellow-700">暂停</button><buttonid="nextBtn"class="px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700 disabled:bg-gray-400 disabled:cursor-not-allowed">下一步</button><buttonid="resetBtn"class="px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-700">重置</button></div></div><!-- 右侧:步骤说明 --><div class="lg:w-1/3 p-4 bg-gray-50"><h2 class="text-xl font-semibold text-indigo-600 mb-3">作图步骤</h2><div class="step-container border border-gray-200 rounded-lg p-3 bg-white"><div id="steps" class="text-sm"><p class="font-medium">加载中...</p></div></div><!-- 步骤进度指示 --><div class="mt-6"><p class="text-sm text-gray-600">当前步骤: <span id="currentStep" class="font-medium">1</span> / <span id="totalSteps" class="font-medium">9</span></p><div class="w-full bg-gray-200 rounded-full h-2.5 mt-2"><divid="progressBar"class="bg-indigo-600 h-2.5 rounded-full"style="width: 0%"></div></div></div></div></div><!-- 版权信息 --><div class="mt-4 text-center text-xs text-gray-400">© 2025 正十七边形尺规作图演示</div></div><script>document.addEventListener("DOMContentLoaded", function () {const canvas = document.getElementById("constructionCanvas");const ctx = canvas.getContext("2d");// 画布尺寸const width = canvas.width;const height = canvas.height;const centerX = width / 2;const centerY = height / 2;// 这里使用200作为“单位圆”半径,为了更清晰const r = 200;// 按钮const prevBtn = document.getElementById("prevBtn");const nextBtn = document.getElementById("nextBtn");const playBtn = document.getElementById("playBtn");const pauseBtn = document.getElementById("pauseBtn");const resetBtn = document.getElementById("resetBtn");// 步骤显示const stepsDiv = document.getElementById("steps");const currentStepSpan = document.getElementById("currentStep");const totalStepsSpan = document.getElementById("totalSteps");const progressBar = document.getElementById("progressBar");// 状态let currentStep = 0;let playInterval = null;const playSpeed = 1500; // 毫秒// 步骤文案const steps = ["画一个单位圆 O(这里设半径=200),标记圆心为 O","画水平直径 AB 和垂直直径 CD","在水平半径 OA 上取点 E,使 OE = 1/4 OA","以 E 为圆心、EA 为半径画圆,交垂直直径于 F 和 G","连接 EF 和 EG,延长 EF 并与单位圆相交于 H","作 FH 的垂直平分线,交单位圆于 I 和 J","点 I 和 J 即为正十七边形的两个顶点","用圆规在单位圆上等分其余 15 个顶点","连接所有顶点,完成正十七边形"];const totalSteps = steps.length;totalStepsSpan.textContent = totalSteps;// 关键点坐标(在动画演示中逐步求解)// 注意:为了演示简洁,我们使用理想化计算,不考虑小数误差// OA 设为半径=200// OE = 1/4 OA => OE=50let A = { x: centerX + r, y: centerY };let B = { x: centerX - r, y: centerY };let C = { x: centerX, y: centerY - r };let D = { x: centerX, y: centerY + r };let O = { x: centerX, y: centerY };let E = { x: centerX + 50, y: centerY }; // OE=1/4 OA// 后面需要的F、G、H、I、J将通过演示过程“动态”绘制function clearCanvas() {ctx.clearRect(0, 0, width, height);}// 辅助函数:绘制一个点function drawPoint(pt, label, color = "red") {ctx.fillStyle = color;ctx.beginPath();ctx.arc(pt.x, pt.y, 4, 0, 2 * Math.PI);ctx.fill();if (label) {ctx.fillStyle = "#444";ctx.font = "14px Arial";ctx.fillText(label, pt.x + 8, pt.y + 6);}}// 辅助函数:画线段function drawLine(p1, p2, color = "#333", width = 2) {ctx.strokeStyle = color;ctx.lineWidth = width;ctx.beginPath();ctx.moveTo(p1.x, p1.y);ctx.lineTo(p2.x, p2.y);ctx.stroke();}// 辅助函数:画圆function drawCircle(center, radius, color = "#666", width = 2) {ctx.strokeStyle = color;ctx.lineWidth = width;ctx.beginPath();ctx.arc(center.x, center.y, radius, 0, 2 * Math.PI);ctx.stroke();}// 根据当前步骤作图function drawStep(step) {clearCanvas();// 先画背景(网格线)ctx.strokeStyle = "#f0f0f0";ctx.lineWidth = 1;for (let y = 0; y < height; y += 50) {ctx.beginPath();ctx.moveTo(0, y);ctx.lineTo(width, y);ctx.stroke();}for (let x = 0; x < width; x += 50) {ctx.beginPath();ctx.moveTo(x, 0);ctx.lineTo(x, height);ctx.stroke();}// 步骤>=0:画单位圆drawCircle(O, r, "#3b82f6");// 标记OdrawPoint(O, "O", "#3b82f6");if (step >= 1) {// 步骤1:画水平直径AB、垂直直径CDdrawLine(A, B, "#3b82f6");drawLine(C, D, "#3b82f6");drawPoint(A, "A", "#10b981");drawPoint(B, "B", "#10b981");drawPoint(C, "C", "#10b981");drawPoint(D, "D", "#10b981");}if (step >= 2) {// 步骤2:在OA上取E,使OE=1/4drawLine(O, A, "#aaa", 1);drawPoint(E, "E", "#ec4899");}let F = null;let G = null;let H = null;let I = null;let J = null;if (step >= 3) {// 步骤3:以E为圆心, EA为半径画圆,交CD于F、G// 半径EAconst EA = Math.sqrt((A.x - E.x) ** 2 + (A.y - E.y) ** 2);drawCircle(E, EA, "#ec4899");// 找F、G:这需要计算圆(E,EA)与直线CD的交点// CD是x=centerX的竖线// 圆(E,EA)方程: (x-Ex)^2 + (y-Ey)^2 = EA^2// 直线: x = centerX// => (centerX - Ex)^2 + (y - Ey)^2 = EA^2 => 求 yconst dx = centerX - E.x;const a = 1;const b = -2 * E.y;const c = dx * dx + E.y * E.y - EA * EA;// y^2 + b*y + c=0// 求根const disc = b * b - 4 * a * c;// 这里简化写法if (disc >= 0) {const y1 = ( -b + Math.sqrt(disc) ) / (2 * a);const y2 = ( -b - Math.sqrt(disc) ) / (2 * a);F = { x: centerX, y: y1 };G = { x: centerX, y: y2 };// 以Y坐标从小到大排序if (F.y > G.y) {let tmp = F;F = G;G = tmp;}drawPoint(F, "F", "#ef4444");drawPoint(G, "G", "#ef4444");// 画线EG、EFdrawLine(E, F, "#ef4444");drawLine(E, G, "#ef4444");}}if (step >= 4 && F) {// 步骤4:连接 EF 和 EG,延长 EF 交单位圆于 H// 求 EF 与单位圆的交点(一种方法:向量或方程)// 先只画延长线drawLine(E, F, "#ef4444");// 我们只找“第二个交点”// EF线方程 param: E + t*(F-E)let vx = F.x - E.x;let vy = F.y - E.y;// 单位圆方程 (x-centerX)^2 + (y-centerY)^2 = r^2// 令 x = Ex + t*vx, y = Ey + t*vy// => (Ex + t*vx - centerX)^2 + (Ey + t*vy - centerY)^2 = r^2function solveCircleLineIntersection(E, F, O, r) {let vx = F.x - E.x;let vy = F.y - E.y;// 移到以O为原点的坐标let Ex_ = E.x - O.x;let Ey_ = E.y - O.y;let A_ = vx * vx + vy * vy;let B_ = 2 * (Ex_ * vx + Ey_ * vy);let C_ = Ex_ * Ex_ + Ey_ * Ey_ - r * r;let disc_ = B_ * B_ - 4 * A_ * C_;if (disc_ < 0) return [];let t1 = (-B_ + Math.sqrt(disc_)) / (2 * A_);let t2 = (-B_ - Math.sqrt(disc_)) / (2 * A_);let sol1 = { x: E.x + t1 * vx, y: E.y + t1 * vy };let sol2 = { x: E.x + t2 * vx, y: E.y + t2 * vy };return [sol1, sol2];}const sol = solveCircleLineIntersection(E, F, O, r);// E-F本身是线段,需要延长,所以交点可能有2个// E点本身不一定在圆上,所以我们要找离E较远的那个点if (sol.length === 2) {// 找跟E距离更远的交点let d1 = (sol[0].x - E.x) ** 2 + (sol[0].y - E.y) ** 2;let d2 = (sol[1].x - E.x) ** 2 + (sol[1].y - E.y) ** 2;H = d1 > d2 ? sol[0] : sol[1];drawPoint(H, "H", "#ef4444");// 真正延长EF到HdrawLine(E, H, "#ef4444");}}if (step >= 5 && F && H) {// 步骤5:作FH的垂直平分线,交单位圆于I和J// 1) 找FH中点 Mlet M = { x: (F.x + H.x) / 2, y: (F.y + H.y) / 2 };// 2) FH斜率 => 垂线斜率 => 过M// 也可以直接用几何法(垂线方程)let dx = H.x - F.x;let dy = H.y - F.y;// 若dx=0 => FH垂直 => 垂直平分线水平// 若dy=0 => FH水平 => 垂直平分线垂直function solvePerpLineCircleIntersection(M, dx, dy, O, r) {// 垂线:过M,斜率 = -dx/dy(若dy!=0)// 参数方程:X = Mx + t*(-dy), Y = My + t*(dx)return function(t) {return {x: M.x + t * -dy,y: M.y + t * dx};};}let param = solvePerpLineCircleIntersection(M, dx, dy, O, r);// 再结合圆方程求交点function lineCircleIntersection(O, r, param) {// 代入: (Mx - O.x - t*dy)^2 + (My - O.y + t*dx)^2 = r^2// => A t^2 + B t + C=0let Mx_ = M.x - O.x;let My_ = M.y - O.y;// Here we do direct expansions// X(t)= Mx_ + t*(-dy), Y(t)= My_ + t*(dx)let A_ = dy * dy + dx * dx;let B_ = 2 * (Mx_ * -dy + My_ * dx);let C_ = Mx_ * Mx_ + My_ * My_ - r * r;let disc_ = B_ * B_ - 4 * A_ * C_;if (disc_ < 0) return [];let t1 = (-B_ + Math.sqrt(disc_)) / (2 * A_);let t2 = (-B_ - Math.sqrt(disc_)) / (2 * A_);let sol1 = param(t1);let sol2 = param(t2);return [sol1, sol2];}let IJ = lineCircleIntersection(O, r, param);if (IJ.length === 2) {I = IJ[0]; J = IJ[1];// 画中点MdrawPoint(M, "M", "#666");// 绘制FHdrawLine(F, H, "#ef4444"); // 垂直平分线drawLine(I, J, "#ec4899", 1.5);drawPoint(I, "I", "#ef4444");drawPoint(J, "J", "#ef4444");}}if (step >= 6) {// 步骤6:I、J为正十七边形的两个顶点// (这里只演示得到I、J,不继续15个点的详细分割)// 如果需要在动画中展示全部17个点,需等分圆// 这里先简化表述}if (step >= 7) {// 步骤7:用圆规等分出其余15个点(简化处理:仅画一些点示意)// 真正的等分需要 360/17 ≈ 21.176470° 间隔。这里仅示意画// 已有2个顶点 I, J。为简便,我们这里“假设”并画出全部17个顶点// 真实构造过程更复杂,这里重点演示原理const allVertices = [];for (let k = 0; k < 17; k++) {let angle = (2 * Math.PI * k) / 17;let vx = centerX + r * Math.cos(angle);let vy = centerY - r * Math.sin(angle);allVertices.push({ x: vx, y: vy });}// 画所有顶点ctx.strokeStyle = "#10b981";ctx.lineWidth = 2;ctx.beginPath();for (let i = 0; i < 17; i++) {let p = allVertices[i];ctx.lineTo(p.x, p.y);}ctx.closePath();ctx.stroke();// 填充一下ctx.fillStyle = "rgba(16,185,129,0.1)";ctx.fill();// 标记几个顶点for (let i = 0; i < 17; i++) {let p = allVertices[i];drawPoint(p, `A${i + 1}`, "#10b981");}}}// 更新步骤说明function updateStepsDisplay() {stepsDiv.innerHTML = "";for (let i = 0; i < steps.length; i++) {const p = document.createElement("p");p.className = i === currentStep ? "font-medium text-indigo-600" : "text-gray-600";p.innerHTML = (i + 1) + ". " + steps[i];stepsDiv.appendChild(p);}currentStepSpan.textContent = currentStep + 1;const progress = (currentStep / (totalSteps - 1)) * 100;progressBar.style.width = progress + "%";prevBtn.disabled = currentStep === 0;nextBtn.disabled = currentStep === totalSteps - 1;}function play() {if (playInterval) return;playInterval = setInterval(() => {if (currentStep < totalSteps - 1) {currentStep++;drawStep(currentStep);updateStepsDisplay();} else {pause();}}, playSpeed);}function pause() {if (playInterval) {clearInterval(playInterval);playInterval = null;}}function reset() {pause();currentStep = 0;drawStep(currentStep);updateStepsDisplay();}function prev() {if (currentStep > 0) {currentStep--;drawStep(currentStep);updateStepsDisplay();}}function next() {if (currentStep < totalSteps - 1) {currentStep++;drawStep(currentStep);updateStepsDisplay();}}// 按钮事件prevBtn.addEventListener("click", prev);nextBtn.addEventListener("click", next);playBtn.addEventListener("click", play);pauseBtn.addEventListener("click", pause);resetBtn.addEventListener("click", reset);// 初始化drawStep(currentStep);updateStepsDisplay();});</script>
</body>
</html>

8. 历史意义与扩展

高斯的这一发现具有深远的数学意义:

  1. 理论突破:解决了存在两千多年的几何问题。

  2. 方法创新:开创了用代数方法解决几何问题的先河,为后来的伽罗瓦理论奠定基础。

  3. 更广泛的结论:证明了哪些正多边形可以用尺规作图,哪些不能。例如:

    • 正257边形(257 = F 3 F_3 F3)和正65537边形(65537 = F 4 F_4 F4)也可以用尺规作图
    • 正7边形、正9边形、正11边形等则无法用尺规精确作图

9. 结语:数学美的完美呈现

正十七边形的尺规作图证明体现了数学之美的多个层面:

  • 逻辑的美:从抽象的代数方程到具体的几何构造,每一步都严密且优雅。
  • 统一的美:代数与几何这两个看似分离的数学分支在此问题中完美融合。
  • 历史的美:一个存在两千多年的古老问题,最终被一位19岁的青年解决。
  • 视觉的美:最终构造出的正十七边形,具有令人赏心悦目的对称性。

正如高斯自己所说:"数学是科学的皇后,而数论是数学的皇后。"正十七边形的尺规作图证明,正是这一理念的完美体现。


本文附带的交互式网页是理解正十七边形尺规作图过程的理想工具,建议读者亲自体验,以加深对这一数学杰作的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29658.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook 的历史与发展:从校园网站到全球社交平台

引言 Facebook&#xff0c;这个全球最大的社交网络平台之一&#xff0c;其发展历程充满了创新和变革。从最初的校园网站到如今的全球社交平台&#xff0c;Facebook 不仅改变了人们的沟通方式&#xff0c;也重塑了信息传播和社交互动的模式。 起源&#xff1a;校园内的点子 Fa…

windows无界面后台定时任务 (重启自启动,ODBS为例)

一、前言 mdb(Microsoft Database)是Microsoft Access中使用的一种数据存储格式,可以通过ODBC驱动程序进行访问和操作,在Python中也可以安装相应模块打开。 这是我在项目中更新bs数据的一个实践记录,结合windows定时一起记录一下,方便以后照搬~ 二、安装 Python安装库…

Android Studio 配置国内镜像源

Android Studio版本号&#xff1a;2022.1.1 Patch 2 1、配置gradle国内镜像&#xff0c;用腾讯云 镜像源地址&#xff1a;https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址&#xff1a;Index of /AndroidSDK/

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤&#xff08;Ollama方式&#xff09;1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…

安装并运行hadoop程序

1.在虚拟机上安装javaJDK &#xff08;1&#xff09;把javaJDK文件上传到服务器 在opt文件夹下新建一个software文件夹&#xff0c;将jdk拖入software &#xff08;2&#xff09;解压文件 在opt文件夹下新建一个module文件夹&#xff0c;确认上传成功之后&#xff0c;在softwa…

学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Animation常量汇总1.1.1 循…

Ubuntu的软件源

百度搜索 ubuntu清华镜像源 根据下面的网页&#xff0c;选择对应Ubuntu操作系统的源&#xff0c;一定要对应&#xff01;&#xff01;&#xff01; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial&#xff0c;这时就一定要使用16.04 xenial的源 …

游戏引擎学习第135天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中&#xff0c;不使用任何现成的游戏引擎或第三方库&#xff0c;而是直接基于 Windows 进行开发&#xff0c;因为 Windows 目前仍然是游戏的标准平台&#xff0c;因此首先在这个环境中进行…

我用Ai学LVGL之入门(DeepSeek版)

文章目录 什么是LVGL?**1. 基本定义****2. 核心特性****3. 典型应用场景****4. 核心优势****5. 与其他嵌入式GUI的对比****6. 如何快速体验&#xff1f;****7. 学习资源** 如何开始学习lvgl&#xff1f;**一、了解LVGL的核心特性与硬件要求****二、搭建开发环境与移植LVGL****…

JmeterHttp请求头管理出现Unsupported Media Type问题解决

JmeterHttp请求头管理出现Unsupported Media Type问题解决 大多数的app与pc端压测的时候都会出现这种情况 当我们在jemter测试当中当中遇见Unsupported Media Type&#xff0c;有一种可能就是我们请求的网页的content-Type的类型与我们测试的时候的类型不一致 解决方法 可以添…

香港地区上线独立多用户电商平台系统需要注意哪些问题

在香港地区上线独立多用户电商平台系统时&#xff0c;需结合本地化需求、技术架构、法律合规及用户体验等多方面因素&#xff0c;以下是需要注意的关键问题及建议&#xff1a; 一、技术架构与服务器部署 服务器配置与带宽选择 根据业务规模选择合适的香港服务器配置&#xff0…

【A2DP】MPEG - 2/4 AAC 编解码器互操作性要求详解

目录 一、概述 二、编解码器特定信息元素(Codec Specific Information Elements ) 2.1 信息元素结构 2.2 对象类型(Object Type) 2.3 MPEG - D DRC 2.4 采样频率(Sampling Frequency) 2.5 通道(Channels) 2.6 比特率(Bit rate) 2.7 可变比特率(VBR) 三、…

使用express创建服务器保存数据到mysql

创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…

使用Galaxy创建生物信息学工作流的步骤详解

李升伟 整理 Galaxy 是一个基于 Web 的生物信息学平台&#xff0c;提供了直观的用户界面和丰富的工具&#xff0c;帮助用户创建和管理生物信息学工作流。以下是使用 Galaxy 创建生物信息学工作流的主要步骤&#xff1a; 1. 访问 Galaxy 平台 打开 Galaxy 的官方网站&#xff…

react中的fiber和初次渲染

源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…

关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题

如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入&#xff1a; <meta charset"UTF-8"> 以jsp为例子&#xff0c;我们…

谐振开关型零电流开关变换器原理及仿真

以Buck DC/DC变换器为例&#xff0c;介绍零电流关断ZCS PWM变换器和零电流关断ZCS PFM变换器工作原理&#xff0c;及simulink仿真结果。 零电流关断脉冲宽度调制ZCS PWM变换器工作原理 下图是Buck DC/DC ZCS PWM变换器的主电路图&#xff0c;它由输入电源Vd、主开关管T1&…

RESTful API 设计指南

RESTful API 介绍 大佬的总结&#xff1a;RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…

Dify部署踩坑指南(Windows+Mac)

组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本&#xff0c;nginx端口不要直接修改docker-compose.yaml &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1、更换镜像版本 这个文件是由.env自动生成的&#xff0c;在.env配置 …

C++:string容器(上篇)

1. 标准库中的string类 1.1 string类 官方链接&#xff1a;string - C Reference (cplusplus.com) 在使用string类时&#xff0c;必须包含#include头文件以及using namespace std; 1.2 auto和范围for auto关键字&#xff1a; 在早期C/C中auto的含义是&#xff1a;使用auto修…