Cesium系列:概览
本文作为cesium系列的第一回,主要介绍些基础的且尽可能全面地内容。坐标系地心为原点,x:坐标点在地球质心到本初子午线(0° 经度)、赤道平面的投影距离(米)y:坐标点在地球质心到东经 90°、赤道平面的投影距离(米)z:坐标点到地球赤道平面的垂直距离(米)
Entity 和 PrimitiveEntity的底层就是Primitive,可以理解为房子和瓦片的关系。创建一个cube,可以用entity,也可以用Primitive。但是,如果上量的时候,性能优化的方案之一就是Primitive,示例代码如下所示。
// 【Entity 示例】单一点/少量点快速创建,封装完整,一行配置即可带样式/描述
// 适合:标记点、简单动画,开发效率优先(内部自动生成Primitive)
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(116.3972, 39.9075, 100),
point: { color: Cesium.Color.RED, pixelSize: 10 } ...
Mysql的问题及对策
最近在整一个rag的项目,数据库用的mysql,频繁报错“Too many connections”。本文会根据项目本身的架构,结合问题,介绍具体方案
3d点云项目性能测试
最近整了个点云的项目,遇到些性能问题。本文将会针对这些问题,给出一些小技巧。在平台上,选择本地的ply点云数据文件展示。效果如下:发现18MB大小的点云文件,耗时2s+,过长,不能忍,优化之。
算法改进整体的逻辑:读取文件内容、逐行读取点数据、整理x、y、z、r、g、b,然后threejs渲染显示。现阶段代码:
// 原始实现
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
if (!line) continue;
const parts = line.split(/\s+/);
if (parts.length >= 6) {
const x = parseFloat(parts[0]);
const y = parseFloat(parts[1]);
const z = parseFloat(parts[2]);
const r = parseInt(parts[3], 10);
const g = par ...
借助AI的能力,实现本地知识库(非工具版)
本文介绍上一篇文章中,我们借助cherry stdio,实现了一个纯个人vip定制的本地向量知识库,本文中,我们将通过完整的前端后端搭建 + 大模型,实现该需求。
总体实现逻辑及技术选型后端:Python 3.8+前端: React 18、Aceternity UI、Framer MotionAI模型:
嵌入模型: all-MiniLM-L6-v2 (384维向量),将文本分割成向量
推理模型: gemma3:4b (Ollama本地部署),分析结果并用人话返回answer
模型工作流程
根据语料库文档,使用嵌入模型切分成块,生成语料库
文档输入 → 嵌入模型 → FAISS向量索引 → 语义搜索 → 获取相关结果片段 → 推理模型 → 输出结果
最终界面演示
注意,其中用到的模型all-MiniLM-L6-v2和 gemma3:4b,需要本地自行下载。代码详情见git地址
借助AI的能力,实现本地知识库(工具版)
本文将详细介绍,如何利用ai的能力,借助cherry stdio,实现一个离线的、纯个人的本地知识库明确目标目前主流的agent,如豆包、chatgpt等,基本逻辑:界面中,用户输入问题, loading…., 输出结果。我们要实现的也是这一套,只不过,大模型思考的过程中,所用到的资料,是我们自己的,而不是来自于网络。这里需要解释一点的是,模型也分成了很多种类。如bge-m3这种,属于嵌入模型,bec-reranker-base_v1,属于重排模型。这俩可以理解为拆分资料库用的。输入原始问题,通过这俩,定位到相关片段。有了相关片段,再通过如QAwen这种推理模型,归纳总结这些片段,然后以人话的形式,输出结果。
具体实现(以cherry studio为例)下载cherry stdio,绑定硅基流动具体自行百度,一波配置后,其基础界面如下:
创建知识库,投喂语料库创建知识库,配置各阶段的模型,然后上传你想要大模型解析的原始语料库。我本人又一直在维护一个个人的博客,所以我就直接把我遗忘写过的所有文章扔了进去。具体操作如下所示:
搭配推理模型,实现离线版、专为个人服务之agent
don ...
Transformation of Team Development Models
I’ve been using Cursor obsessively lately, which sparked some ideas so I want to share them hereConclusion first: with AI-assisted capability, one person becomes an entire team
The legacy development routinePRD + prototype + code
Product managers interview stakeholders, nail down requirements, and produce the PRD
Designers coordinate with product to deliver the UI prototype
Engineers align with product and design, clarify requirements, then schedule and start coding
This is the typical mainstr ...
Fps射击游戏开发:第二回
本文介绍在上一篇文章中我们介绍了一些基本的先验内容,并且搭建了一个基础场景。本文目标,挂载枪支,并实现子弹射击逻辑
枪支挂载
首先需要创建枪支的刚体,用了三个cube搭建,同时把他用一个整体包裹,方便后续敌人复用。
编写对应Gun和GunController,具体代码如下:
Gun.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gun : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
GunController
using System.Colle ...
Fps射击游戏开发:第一回
由于项目需要,研究了下unity,借此写个小游戏,所以本文开始,将详细记录,使用unity开发fps射击游戏的所有细节认识编辑器
基本的界面如上图所示,就四大块工作区:视图区(红色)、文件区(橙色)、对象区(蓝色)及最右侧的inspector区域。其中inspector可以看作是属性详情,例如我们选中某个刚体(物体,如圆柱、地面),能够看到该刚体的位置等的所有信息,当然,还包括了其绑定的c#代码文件。
我们首先创建了一个圆柱体和一个地面。本质就是俩三维刚体,通过GameObject选项卡中的capsule和plane创建。并分别给他们加了点material(材质、颜色)。最后设置了一个光照,使其看起来有质感些。
Start和Update这俩函数是我们之后几乎标配的函数。前者在项目开始运行时,执行一次。后者就是大名鼎鼎的tick时刻,每帧执行,类似于前端的raf函数。
给圆柱体绑定c#代码创建scripts文件夹专门存放代码文件,然后选中物体,将c#文件直接拖入inspector中绑定。代码文件具体如下。
palyer.cs
using System.Collections;
u ...
Thoughts on the Frontend Product Perspective
Keep it simpleHaving been in development for four years and worked on plenty of projects, I suddenly had some thoughts about the product side.
It started when I noticed many domestic friends building independent sites and overseas ventures. After briefly getting involved, I realized that some shopping platforms can be extremely minimalist. Because of work, I got exposed to many overseas businesses. Compared with domestic projects, they share one glaring trait: clean, flashy, and built on modern ...
力扣经典100题- 字母异位词分组
字母异位词分组思路:大力出奇迹,首先写一个算法,暴力的出任意字符串的全排列集合。然后依次遍历strs,双循环得出所有剩余项目中的亦或字符串,完毕。
/**
* @param {string[]} strs
* @return {string[][]}
*/
const returnAllChildArr = (arr) => {
const res = []
const used = new Array(arr.length).fill(false)
const walk = (curArr, len) => {
if (curArr.length === len) {
if (!res.includes(curArr.join(''))) {
res.push(curArr.join(''))
}
return
}
for (let i = 0; i < len; i++) { ...
