2021-05-25

datart 二开环境搭建 下载源码, 地址: https://github.com/running-elephant/datart, dev 分支; 解压后使用 idea 打开; 服务端: 3.1 安装依赖, idea会自动安装; 3.2 修改配置文件 /config/application.yml 3.3 创建数据库,并将bin/datart.sql导入到数据库中 3.4 入口: /server/src/main/java/datart/DatartServerApplication.java [外链图片转存失败,源站可能有防. 阅读详情

OpenGL交互式绘制三次B样条曲线

代码:

如何插入一段漂亮的代码片

代码片.

#include<gl/glut.h>
#include<math.h>
#include<windows.h>
#include<vector>
#include<algorithm>
using namespace std;
bool mouseRight = false;
struct Point
{
	int x, y;
	Point() {};
	Point(int tx, int ty)
	{
		x = tx;
		y = ty;
	}
};
vector<Point> points;
vector<int> stop;

double caculateDistance(Point a, Point b) 
{
	return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
int getIndexNearMouse(int x, int y) 
{
	double max = 200;		
	int index = -1;
	double min;
	for (int i = 0; i < points.size(); i++)
	{
		double dis = caculateDistance(points[i], Point(x, y));
		if (dis < max)
		{
			if (index == -1)
			{
				index = i;
				min = dis;
			}
			else if (dis < min)
			{
				index = i;
				min = dis;
			}
		}
	}
	return index;
}
void Bspline(Point a, Point b, Point c, Point d)  
{
	int n = 500;
	double derta = 1.0 / n;
	glPointSize(2);
	glColor3d(0, 0, 0);
	glBegin(GL_LINE_STRIP);
	for (int i = 0; i <= n; i++)
	{
		double t = derta * i;
		double ratio[4];
		ratio[0] = -1 * pow(t, 3) + 3 * pow(t, 2) + -3 * t + 1;
		ratio[1] = 3 * pow(t, 3) + -6 * pow(t, 2) + 4;
		ratio[2] = -3 * pow(t, 3) + 3 * pow(t, 2) + 3 * t + 1;
		ratio[3] = 1 * pow(t, 3);
		double x = 0, y = 0;
		x += ratio[0] * a.x + ratio[1] * b.x + ratio[2] * c.x + ratio[3] * d.x;
		y += ratio[0] * a.y + ratio[1] * b.y + ratio[2] * c.y + ratio[3] * d.y;
		x /= 6.0;
		y /= 6.0;
		glVertex2d(x, y);
	}
	glEnd();
}
void myDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT);   


	glPointSize(5);
	glColor3d(1, 0, 0);
	glBegin(GL_POINTS);
	for (int i = 0; i < points.size(); i++)
		glVertex2d(points[i].x, points[i].y);
	glEnd();

	if (points.size() >= 4)
		for (int j = 0; j < stop.size()-1 ; j++)
		{
			for (int i = stop[j]; i < stop[j+1] - 3; i++)
				Bspline(points[i], points[i + 1], points[i + 2], points[i + 3]);
		}
	glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
	if (key == 27)		//ESC
		exit(0);
	if(key == 32)       //space
	{
		stop.push_back(points.size()-1);
	}
}
void mouse(int button, int state, int x, int y)
{
	if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 
	{
		Point t(x, y);
		points.push_back(t);
		auto &val = stop.back();
		val = points.size();
		glutPostRedisplay();
	}
	if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)  
		mouseRight = true;
	if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP)
		mouseRight = false;
}
void motion(int x, int y)
{
	if (mouseRight)		
	{
		int index = getIndexNearMouse(x, y);
		if (index == -1)
			return;
		points[index].x = x;
		points[index].y = y;
		glutPostRedisplay();
	}
}
void Reshape(int w, int h)      
{
	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0, w, h, 0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

void initWindow(int& argc, char* argv[], int width, int height)    
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - width) >> 1, (GetSystemMetrics(SM_CYSCREEN) - height) >> 1);       
	glutInitWindowSize(width, height);       
	glutCreateWindow("B样条");

	glClearColor(1, 1, 1, 0);
	glShadeModel(GL_FLAT);
}

int main(int argc, char* argv[])
{
	stop.push_back(0);
	stop.push_back(1);
	initWindow(argc, argv, 1000, 600);

	glutDisplayFunc(myDisplay);
	glutReshapeFunc(Reshape);
	glutMouseFunc(mouse);
	glutMotionFunc(motion);
	glutKeyboardFunc(keyboard);

	glutMainLoop();
	return 0;
}


Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践 摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。 阅读详情

相关推荐

千手柱间[秽土转生]
博客等级 码龄6年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值