全国大学生计算机设计大赛参赛作品 · 信息可视化 · 交互信息设计

https://4c2026p1.sujianyu.cn

目录

1. 项目背景

2. 设计理念

3. 技术架构

4. 核心功能实现

5. 创新亮点

6. 开发经验总结

7. 竞争优势

8. 应用价值

9. 团队协作

项目背景

崖州古城:海南千年文化的活化石

崖州古城位于海南省三亚市崖州区,始建于南北朝时期,历经隋、唐、宋、元、明、清六个朝代的建设与发展,是海南岛历史最悠久的古城之一。

  • 历史地位:海上丝绸之路的重要驿站,中原文化传入海南的桥头堡

  • 文化价值:贬官文化的重要发源地,见证了李德裕、苏轼、赵鼎等名臣谪贤的足迹

  • 建筑特色:"负山襟海" 的独特格局,完整体现中华传统营城礼制

项目动机

随着城镇化的快速推进,许多古建筑面临着保护与传承的困境。如何让年轻一代了解并喜爱上这些珍贵的文化遗产?我们希望通过数字化手段,让崖州古城的建筑文化 "活" 起来,让千年风骨得以传承。

设计理念

四层叙事结构:从物到魂的文化升华

我们采用 "形→技→人→魂" 的四层递进叙事结构,将抽象的文化概念转化为具象的交互体验:

形(空间载体)→ 技(匠心智慧)→ 人(人文底蕴)→ 魂(精神内核)

视觉设计

  • 主色调:深褐赭石 (#8B4513) + 古金 (#C9A961) + 墨黑 (#1A1A1A)

  • 背景风格:宣纸纹理渐变,营造古朴典雅的氛围

  • 字体选择:Noto Serif SC(标题)+ Noto Sans SC(正文)

  • 交互反馈:悬停上浮发光、点击联动动画

技术架构

技术栈

层级

技术选择

说明

前端

HTML5 + CSS3 + JavaScript (ES6+)

纯原生实现,零第三方依赖

3D 渲染

Three.js + DRACOLoader

高精度古建筑模型展示

数据可视化

SVG + Canvas 2D

环形图、关系图谱等可视化

后端

Node.js (原生 http 模块)

轻量级 API 服务

AI 服务

DeepSeek API

智能助手对话系统

部署

Docker + 1Panel

容器化部署,易于维护

系统架构图

核心功能实现

1. 崖城之魂:环形联动可视化

功能概述

第四部分 "魂·风骨之承" 是整个项目的核心,通过三层环形可视化展示 "形→技→人→魂" 的文化升华逻辑。

核心代码

// js/spirit.js - 环形可视化核心逻辑 
const dimensionData = { 
shape: { 
name: '形', 
title: '古城格局', 
subtitle: '空间载体', 
color: '#8B4513', 
description: '古城独特的城池格局、街巷肌理、空间布局,是崖州文化最直观的物质载体。', 
features: ['城池形制', '街巷肌理', '空间布局'] 
}, 
tech: { 
name: '技', 
title: '营造技艺', 
subtitle: '匠心智慧', 
color: '#D2691E', 
description: '传统营造技艺、材料工艺、装饰美学,是古人因地制宜、顺势而为的建造智慧。', 
features: ['榫卯工艺', '雕刻技法', '建筑智慧'] 
}, 
people: { 
name: '人', 
title: '历史人物', 
subtitle: '人文底蕴', 
color: '#CD853F', 
description: '历代名臣谪贤、本土先民、商旅百姓在崖州生活耕耘、兴教兴城。', 
features: ['名臣谪贤', '本土先民', '商旅百姓'] 
}, 
soul: { 
name: '魂', 
title: '崖城之魂', 
subtitle: '精神内核', 
color: '#C9A961', 
description: '形、技、人三者共同凝练崖城精神内核。' 
} 
}; 
// 状态管理 
const State = { 
activeDimensions: new Set(), 

activateDimension(dim) { 
this.activeDimensions.add(dim); 
this.updateUI(); 

const beam = document.querySelector(`.energy-beam.beam-${dim}`); 
if (beam) { 
beam.classList.add('active'); 
this.createBeamParticles(dim); 
} 

this.checkCompletion(); 
}, 

checkCompletion() { 
if (this.activeDimensions.size === 3) { 
document.querySelector('.center-soul').classList.add('glowing'); 
} 
} 
}; 

技术亮点

  • SVG 环形图:三层 SVG 圆环,支持点击高亮

  • Canvas 粒子动画:能量光束流动效果

  • CSS 3D 变换:立体模块卡片交互

  • 状态机设计:管理激活状态与联动逻辑

2. 3D古建筑模型查看器

功能概述

使用 Three.js 实现高精度古建筑模型的交互式展示,支持缩放、旋转、平移等操作。

核心代码


// js/model-viewer.js - Three.js模型查看器 
class ModelViewer { 
constructor() { 
this.container = document.getElementById('model-viewer'); 
this.scene = null; 
this.camera = null; 
this.renderer = null; 
this.controls = null; 
this.init(); 
} 

init() { 
// 场景 
this.scene = new THREE.Scene(); 

// 相机 
this.camera = new THREE.PerspectiveCamera( 
45, 
this.container.clientWidth / this.container.clientHeight, 
0.1, 
1000 
); 
this.camera.position.set(4, 3.2, 4); 

// 渲染器 
this.renderer = new THREE.WebGLRenderer({ 
antialias: true, 
alpha: true 
}); 
this.renderer.setSize(this.container.clientWidth, this.container.clientHeight); 
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); 
this.renderer.shadowMap.enabled = true; 
this.renderer.shadowMap.type = THREE.PCFSoftShadowMap; 

// 控制器 
this.controls = new OrbitControls(this.camera, this.renderer.domElement); 
this.controls.enableDamping = true; 
this.controls.dampingFactor = 0.05; 
this.controls.autoRotate = true; 

// 灯光系统 
this.setupLights(); 

// 加载模型 
this.loadModel(); 
} 

setupLights() { 
// 环境光 
const ambientLight = new THREE.AmbientLight(0xffffff, 0.4); 
this.scene.add(ambientLight); 

// 主光源 
const mainLight = new THREE.DirectionalLight(0xfff8f0, 1.2); 
mainLight.position.set(5, 10, 5); 
mainLight.castShadow = true; 
this.scene.add(mainLight); 

// 补光 + 轮廓光 
// ... 
} 
} 

技术亮点

  • DRACO 压缩:高精度模型体积压缩 90%+

  • PCFSoftShadowMap:柔和阴影效果

  • ACESFilmicToneMapping:电影级色调映射

  • OrbitControls:流畅的相机控制

3. AI智能助手:崖城智查

功能概述

集成 DeepSeek API,提供崖州古城历史文化的智能问答服务。

核心代码


// api-server.js - AI服务端实现 
const SYSTEM_PROMPT = `你是"崖城智查",崖州古城建筑文化数字图鉴的智能助手。 

【背景知识】 
崖州古城位于海南省三亚市崖州区,是海南岛历史最悠久的古城之一: 
- 始建于南北朝时期,历经隋、唐、宋、元、明、清六个朝代 
- 明代洪武十七年(1384年)扩建为千户所城,形成"城中有城"的防御体系 
- 城墙周长约2.5公里,设有东、南、西、北四个城门 

【你的职责】 
1. 回答用户关于崖州古城历史、建筑、文化、人物的问题 
2. 提供专业、准确、有深度的历史文化解答 
3. 用中文回答,语言风格典雅庄重`; 

async function callDeepseekAPI(messages) { 
const apiUrl = new URL('/v1/chat/completions', DEEPSEEK_BASE_URL); 

const postData = JSON.stringify({ 
model: 'deepseek-chat', 
messages: messages, 
temperature: 0.7, 
max_tokens: 800, 
stream: false 
}); 

const options = { 
hostname: apiUrl.hostname, 
port: apiUrl.port || 443, 
path: apiUrl.pathname, 
method: 'POST', 
headers: { 
'Content-Type': 'application/json', 
'Authorization': `Bearer ${DEEPSEEK_API_KEY}` 
} 
}; 

// HTTPS请求处理 
// ... 
} 

技术亮点

  • 上下文记忆:支持多轮对话

  • 知识库注入:系统提示词包含崖州专属知识

  • 优雅降级:API 不可用时提供友好提示

  • 流式响应(可选):打字机效果输出

4. 人物关系图谱

功能概述

使用 Canvas 2D 实现力导向图,可视化展示崖州历史人物之间的关系网络。

核心代码


// js/people-interactions.js - 关系图谱实现 
const RelationGraph = { 
canvas: null, 
ctx: null, 
nodes: [], 
edges: [], 

nodeData: [ 
{ id: 'hanyuan', name: '韩瑗', era: '唐', x: 0.2, y: 0.3, color: '#8B4513', size: 28 }, 
{ id: 'luduoxun', name: '卢多逊', era: '宋', x: 0.55, y: 0.25, color: '#D2691E', size: 28 }, 
{ id: 'zhaoding', name: '赵鼎', era: '宋', x: 0.7, y: 0.4, color: '#D2691E', size: 28 }, 
// ... 更多节点 
], 

edgeData: [ 
{ from: 'hanyuan', to: 'cuiyuanzong', label: '同为唐相贬崖州', strength: 0.8 }, 
{ from: 'luduoxun', to: 'zhaoding', label: '水南村文脉', strength: 0.8 }, 
// ... 更多边 
], 

animate() { 
this.animationId = requestAnimationFrame(() => this.animate()); 

// 物理模拟:节点相互排斥、边有引力 
this.nodes.forEach(node => { 
// 计算受力 
// ... 

// 更新位置 
node.px += node.vx; 
node.py += node.vy; 
}); 

// 绘制 
this.render(); 
}, 

render() { 
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); 

// 绘制边 
this.edges.forEach(edge => { 
this.ctx.beginPath(); 
this.ctx.moveTo(edge.fromNode.px, edge.fromNode.py); 
this.ctx.lineTo(edge.toNode.px, edge.toNode.py); 
this.ctx.strokeStyle = 'rgba(139, 69, 19, 0.3)'; 
this.ctx.stroke(); 
}); 

// 绘制节点 
this.nodes.forEach(node => { 
this.ctx.beginPath(); 
this.ctx.arc(node.px, node.py, node.size, 0, Math.PI * 2); 
this.ctx.fillStyle = node.color; 
this.ctx.fill(); 

// 绘制文字 
this.ctx.fillStyle = '#fff'; 
this.ctx.font = '14px Noto Sans SC'; 
this.ctx.textAlign = 'center'; 
this.ctx.fillText(node.name, node.px, node.py + 4); 
}); 
} 
}; 

创新亮点

1. 纯原生技术栈,零第三方依赖

整个前端使用原生 HTML5 + CSS3 + JavaScript 实现,不依赖任何框架(React/Vue/Angular),保证了:

  • 极致性能:无框架开销,加载速度快

  • 高度可定制:完全控制每一行代码

  • 易于维护:代码结构清晰,无版本冲突风险

  • 教育意义:展示了现代 Web 技术的原生能力

2. 四层叙事结构,沉浸式文化体验

将抽象的文化概念转化为具象的四层递进体验,让用户从 "看建筑" 到 "悟精神",完成从物质到精神的升华。

3. AI+文化遗产,智能化知识服务

集成 DeepSeek API,让用户可以通过自然语言与历史对话,打破了传统展示方式的信息壁垒。

4. 3D数字化保护,文化遗产永存

通过高精度 3D 建模与 WebGL 渲染,让崖州古建筑可以被全世界的人 "触摸",即使实体建筑受损,数字化版本也能永久保存。

5. 多感官沉浸体验

  • 视觉:古朴典雅的视觉设计,流畅的动画效果

  • 听觉:定制的背景音乐,营造沉浸氛围

  • 交互:丰富的触控 / 鼠标交互,主动探索而非被动接收

开发经验总结

1. 性能优化策略

优化项

实现方式

图片资源

WebP 格式,懒加载,CDN 加速

3D 模型

DRACO 压缩,按需加载

动画

使用 transform/opacity 而非 top/left

事件

事件委托,减少监听器数量

渲染

Canvas 使用 requestAnimationFrame

缓存

静态资源多级缓存策略

2. 响应式设计实践

  • 桌面优先:1200px+ 宽屏最佳体验

  • 平板适配:768-1199px,三栏变上下堆叠

  • 移动端:<768px,单列布局,环形图缩放

3. 团队协作经验

  • Git 工作流:主分支保护,Pull Request 代码审查

  • 文档先行:PRD、技术架构文档先写再编码

  • 模块化设计:各功能模块独立开发,降低耦合

  • 定期同步:每日站会,每周迭代规划

竞争优势

1. 选题独特,文化价值高

崖州古城作为海南历史文化的代表,兼具海上丝绸之路、贬官文化、传统建筑等多重文化价值,选题具有独特性和稀缺性。

2. 技术深度与广度兼备

  • 前端:原生 JS、Three.js、SVG、Canvas

  • 后端:Node.js、API 设计

  • 3D:建模、压缩、渲染

  • AI:大语言模型集成

  • 部署:Docker、容器化

3. 交互设计出色,用户体验佳

丰富的交互形式(转盘、时间轴、粒子效果、3D 查看、AI 对话)让用户在探索过程中保持兴趣,体验流畅。

4. 内容翔实,资料权威

所有史实内容基于《崖州志》《琼台志》等权威史料,保证了内容的准确性和学术价值。

应用价值

1. 教育教学场景

  • 高校建筑史、传统文化课程的教学辅助工具

  • 中小学研学教育的数字科普资源

  • 在线课程的互动演示材料

2. 展陈传播场景

  • 博物馆、文旅场馆的数字展陈内容

  • 崖州古城景区的导览系统

  • 线上文博传播的数字化载体

3. 大众科普场景

  • 面向公众的中华古建筑文化科普平台

  • 提升文化自信的数字内容产品

  • 短视频、公众号等新媒体的素材来源

团队协作

团队成员

角色

负责模块

刘海琪不了💤

项目负责人 3D 模型

stupidjy

前端开发、交互设计

UI 设计、视觉设计

师?

内容策划、史料整理

Sujoy

AI 集成、部署运维

协作工具

  • 代码管理:GitHub

  • 文档协作:WPS

  • 设计工具:墨刀

  • 通讯:微信 + 腾讯会议

结语

崖州古城的千年风骨,不仅存在于史书典籍中,更应该活在当代人的心中。通过这个项目,我们希望用数字技术为古老的建筑文化注入新的生命力,让更多人了解崖州、喜爱崖州。

千年崖城风骨,永续文脉传承

相关链接

📦 GitHub 仓库:https://github.com/sujianyuhi/4cyazhou

感谢阅读!如有任何问题或建议,欢迎提交 Issue 或 Pull Request