- 博客(47)
- 收藏
- 关注
原创 【项目实训】线形组件的细节
组件大致可以分为矩形类组件和线形组件,矩形组件最典型的就是普通矩形,它的变化形式较为规范,变换过程中外部轮廓始终是矩形。线形的变化则相对灵活,线形组件的绘制由转折点构成,按照特定的顺序连接。线形组件面临着一些细节问题1.线形组件关键点的增加和减少。2.如何正确维护线形组件关键点的顺序。对于第一个问题,采用动态数组去维护线形组件的关键点顺序。当移动透明关键点时,改关键点会变为非透明点,而且该点分别与其相邻的节点的中点会产生新的节点,产生新节点后,要将其插入改关键点的前后相邻位置。关键代码对于第二个问题,
2022-06-02 15:20:07 115
原创 【项目实训】线形箭头的变化
若是普通的箭头,则使用<maker>通过设置maker-end,maker-start便可以使得箭头方向随着线条的方向改变而改变。对于那种棒状的箭头,并没有成熟的API接口可以使用,只好采用记录所有转折点的方式,通过<path>绘制。通过记录所有关键点的方式绘制箭头,同时也意味着图形的变化会导致关键点的变化,而且其变换方式较为复杂。如图,橙色关键点用来调控组件的宽度,以及箭头的形状,蓝色关键点则用来调整组件的位置。可以将其看做一条位于中间的线,随后将其...
2022-05-26 10:29:34 138
原创 【项目实训】多段线扩充为平行线
线条的变换处理较为容易,通过增加关键点的位置即可,其svg格式即将关键点顺序连接。在拖动关键点是,分为端点和内部的关键点。若是端点,则可以直接改变坐标,若是内部的关键点,则在改变关键点后并多出来两个内部关键点,新的关键点出现在中点处。std::string res = "M " + std::to_string(startPoint->getX()) + " " + std::to_string(startPoint->g
2022-05-22 12:50:02 227
原创 【项目实训10】箭头的绘制
一个常见的使用SVG绘制的图形是箭头。一行代码就可以创建一个,但是这样代码重复度很大。你也可以在<defs>和<symbol>中定义好再去重用,但是你每次应用的时候都需要对其移动或旋转。直接用一个<marker>元素的话会方便很多著作权归作者所有。marker是一种可以连结一个或多个path,line,polyline,polygon的顶点的标志类型。最常见的用例是绘制箭头或在输出结果的线上的标记一个(polymarker)图形。箭头均采用path进行绘制。m
2022-05-22 11:06:26 776
原创 【项目实训9】后端与核心的框架与测试
这周主要是于核心讨论并完善组件的共用框架组件在逻辑上呈现树形结构,实际则是顺序的结构。针对单个组件与多组件的操作分别创建两个类Component与Canvas类确定大致架构以后,逐步完善内部实现。Component类的实现 public: void changeElementAttributes(std::string attributesName,std::string attributesValue); /* * 改变组价的某些属
2022-05-01 15:00:11 168
原创 【项目实训8】后端与核心初步讨论
这周后端与核心对组件的框架进行了初步讨论。后端与核心的大致连接流程从组建个体与组件层级讨论了一些共用方法组件个体方面public:createElement();//创建组件deleteElement();//删除组件moveElement();//移动组件moveCorePoint();//移动组件的单个关键点deleteCorePoint();//删除关键点addCorePoint();//增加关键点。scaleElement();//改变组件大小ge
2022-04-24 14:25:02 257
原创 【项目实训7】前后端通信与websocket
在前后端通信过程中发现已有的socket与后端代码并不兼容,我写的后端代码是使用mingw进行编译的,而socket部分的编译方式是msvc,连接以后会出现不兼容的问题。部分的报错信息所以选择重新写一个mingw编译下的socket,方便前后端通信。...
2022-04-17 15:06:49 2436
原创 【项目实训6】前后端交互的格式以及规则
前后端交互的方式有多种,在经过讨论以后选择了socket进行传递数据,数据格式为json。由于c++并不能直接操作json格式,需要通过jsoncpp第三方库进行操作。jsoncpp使用也很方便,下载过后,找到amalgamate.py文件然后编译。编译结束后,会出现dist文件夹,将其中的内容复制到项目中,在使用时,include "json/json.h",即可,编译时应该把jsoncpp.cpp,json.h,json-forward.h一同编译,否则会出现错误。dist文件夹内容
2022-04-16 14:47:35 2059
原创 【项目实训4】基础组件的操作逻辑
由于组件涉及到各种操作,最为常见的就是放大、缩小以及组件的移动。以矩形来举例。记录了矩形的8个关键点。如图所示当矩阵移动时只需要改变8个关键点的坐标。其次就是进行放大缩小,放大缩小的操作分为不同类型,根据不同的关键点共有8种不同的方向。每个点均可以进行放大缩小。以左上角为0号点,顺时针依次编号。在0点进行放缩图形时,4号点并不会移动,0,2,6号点会有不同的变换方式,改变0,2,6号点以后,重新计算其余各点坐标。1号,2号等其余各点变换情形与0号点类似,维护4个角的坐标,..
2022-04-16 14:33:29 56
原创 【项目实训3】组件与点的关系
组件的形式各种各样,这也给判断鼠标与组件的关系带来了麻烦,对于不同类型的组件判断方式也多种多样。规则图形比如圆、椭圆一类的可以根据其性质进行判断。圆可以判断点与圆心的距离和半径的大小,若小于等于则点在圆内部。bool circle :: isInside(double x,double y){ return (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r;}椭圆可以根据点到椭圆两个焦点的距离之和与椭圆长轴的关系来判断。距离和大于长轴,则在椭圆之外;距离和等
2022-04-02 16:02:55 55
原创 【项目实训2】项目整体框架
确立前后端的部分接口以后,对后端的大致的框架进行了设计。最基本的元素是一个个的组件,其次是整个画布,对所有的组件建一个父类component,然后各种组件分别继承自component类。component类抽象了组件的共有特征,如组件外围矩阵的长和宽、判断点与组件的关系、外围矩阵点、判断鼠标与当前外围矩阵点的关系等等。对于画布目前对其建立一个cavas类,类中主要对各个组件进行处理,如判断当前所选框内所包含的组件、在画布中创建组件等等。...
2022-03-28 17:05:14 255
原创 【项目实训1】SDU Chart Team 关于后端的需求
在第一周与第二周对整个项目的整体架构进行讨论以后,对于前后端的接口与定义做了一些规范。大致确定了后端的逻辑。后端主要负责画布的深层逻辑。后端主要负责响应前端的事件,包括组件事件、鼠标事件等。还有一些对鼠标位置处于组件内部、边缘以及外部进行判断并做组件:基本属性:颜色、坐标、线条宽度等等。坐标:以画布左上角为原点。核心元素:中心坐标(图形的移动等都以该坐标为准),组件状态(核心状态,固定状态)组件方程:由核心-图形提供,主要用于描述组件的具体形状,判断鼠标与组件的位置关系。
2022-03-16 18:46:12 306
原创 【山大智云开发日志】seafdav分析(12)
2021SC@SDUSCstream_tools.py:实现 FileLikeQueue 帮助器类。 此帮助程序类旨在处理传入 PUT 的用例 请求应直接流式传输到远程目标。 用法:将此类的一个实例返回给`begin_write`,并将其传递给 同时消费者:def begin_write(self, contentType=None):队列 = FileLikeQueue(max_size=1)requests.post(..., 数据=队列)...
2021-12-27 22:52:22 241
原创 【山大智云开发日志】seafdav分析(9)
2021SC@SDUSC经过几周的代码学习,已经完成了大部分代码的分析,还剩下一些零散的文件。_version.py主要是描述了当前的WsgiDAV版本号。
2021-12-06 00:12:47 309
原创 【山大智云开发日志】seafdav分析(8)
2021SC@SDUSC经过几周的代码学习,已经完成了大部分代码的分析,还剩下一些零散的文件。_version.py主要是描述了当前的WsgiDAV版本号。
2021-11-29 00:09:22 90
原创 【山大智云开发日志】seafdav分析(7)
2021SC@SDUSCext_wsgiutils_server.py。ext_wsgiutils_server.py 是 Paste 中 wsgiutils 服务器的扩展。 它支持传递所有 HTTP 和 WebDAV (rfc 2518) 方法。使用捆绑的 ext_wsgiutils_server.py 作为独立服务器运行:用法:python ext_wsgiutils_server.py [选项] [配置文件]...
2021-11-21 22:27:39 888
原创 【山大智云开发日志】seafdav分析(6)
2021SC@SDUSCext_wsgiutils_server.py。ext_wsgiutils_server.py 是 Paste 中 wsgiutils 服务器的扩展。 它支持传递所有 HTTP 和 WebDAV (rfc 2518) 方法。使用捆绑的 ext_wsgiutils_server.py 作为独立服务器运行:用法:python ext_wsgiutils_server.py [选项] [配置文件]配置文件: WsgiDAV 的配置文件。如果省略,应用程序 将在当前目录中查找
2021-11-14 22:06:17 1359
原创 【山大智云开发日志】seafdav分析(4)
2021SC@SDUSCseahub_db.py:主要是负责数据库初始化,以及数据库连接def create_seahub_db_engine()#创建seahub数据库的连接def ping_connection(dbapi_connection, connection_record, connection_proxy)主要用来解决“MySQL已经中断”的问题,因为空闲太长时间,当MySQL服务器重启或池连接被MySQL服务器关闭时,MySQL会中断def ping_conne
2021-10-31 23:18:46 116
原创 【山大智云开发日志】seafdav分析(3)
2021SC@SDUSCdomain_controller.py主要由类SeafileDomainController构成类的初始化,这些方法主要负责类的初始化与一些基本功能的判定 def __init__(self, wsgidav_app, config): self.session_cls = seahub_db.init_db_session_class() def __repr__(self): return self.__clas
2021-10-24 14:12:47 2171
原创 【山大智云开发日志】seafdav分析(2)
2021SC@SDUSC在大致学习了jijan2的基本用法后,便开始了wsgidav的源码分析。WsgiDAV 是一个用 Python 开发的通用 WebDAV 服务器,基于 WSGI 运行,支持 SSL。wsgidav安装和运行:$ pip install wsgidav$ wsgidav --host=0.0.0.0 --port=8080 --root=/tmpWARNING: share '/' will allow anonymous access.Running WsgiDA
2021-10-17 15:52:32 192
原创 【山大智云开发日志】seafdav分析(1)
2021SC@SDUSC在配置好项目的环境之后,便开始了项目分析,我负责分析seafdav模块。seafdav是the WebDAV server for seafile即seafile的WebDav服务器。seafdav简介 seafdav是seafile的WebDav服务器。主要是webdav扩展模块,WebDAV是一种基于HTTP1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Se...
2021-10-09 14:56:57 241
原创 【山大智云开发日志】项目安装与部署
目录简介操作系统前置操作安装vim安装docker自动安装手动安装apt换源备份镜像源新建国内源部署创建docker容器docker相关操作安装中文语言安装前置组件升级apt安装依赖项安装nodejs安装python及依赖模块准备数据库建表创建master用户下载项目源代码编译并安装项目创建配置文件后台并发管理安装screen创建窗口不挂起地回到主窗口回到窗口关闭窗口seafile
2021-09-30 19:12:52 288
原创 CF1556D(交互)
性质:a[i]+a[j]==a[i]&a[j] + a[i]|a[j];所以先由前三个算出a[1],再由a[1]推出其他值#include<bits/stdc++.h>#define LL long long#define N 301010#define M 1000100using namespace std;int n,k,a[N];int main(){ int x,y,z,t; scanf("%d%d",&n,&k); cout<
2021-09-15 20:05:31 54
原创 点分治
点分治适合处理大规模的树上路径信息问题。每次选择重心进行分治,共会递归logn次学习博客https://oi-wiki.org/graph/tree-divide/P3806 【模板】点分治1给定一棵有n个点的树,询问树上距离为k的点对是否存在。模板题#include<bits/stdc++.h>#define N 10010#define M 10000010using namespace std;const int inf=1e9;int n,m,...
2021-03-27 00:32:51 71
原创 割点,桥,双联通分量
学习博客:https://www.cnblogs.com/kamimxr/p/11053539.html区分并理解树边和非树边,尤其是树边POJ 2117 Electricity(无向图割点)主要是对割点模板的理解#include<cstdio>#include<iostream>#include<cstring>#include<vector>#define N 100010using namespace std;int tim
2021-01-22 22:17:59 89
原创 Manacher
马拉车:线性求回文串学习博客:https://www.cnblogs.com/cloudplankroader/p/10988844.html最长回文HDU - 3068(模板)模板题#include<bits/stdc++.h>#define N 310010#define LL long longusing namespace std;char s[N],a[N];int p[N];int get(){ memset(p,0,sizeof(p)); in..
2021-01-15 22:00:31 57
原创 dance links X
dlx:主要解决精确覆盖,多重覆盖问题。基于十字链表的快速删除与恢复。学习博客:https://www.cnblogs.com/grenet/p/3145800.htmlP4929 【模板】舞蹈链(DLX)建链表时行的顺序是颠倒的(u,d每次更新的表头),不过并不影响#include<bits/stdc++.h>#define N 100100using namespace std;int n,m,ans[N];int d[N],u[N],L[N],R[N],s[N],
2021-01-15 11:33:30 55
原创 CF1416 C. XOR Inverse(字典树分治求逆序对)
题意:给出一个序列a,求一个x使得a中所有数异或x之后,a的逆序数最小,如果有多个x,求最小的x题解:我们建立01字典树,将每一个数依次插入,在途径的点记录该位的0/1。我们思考,对于一个数的每一位(字典树的每一层)都有可能形成逆序对。对于p节点。我们查看途径他的0,1序列。可以O ( n ) 记录其中<0,1>对和<1, 0>对的数量。我们把每一层的01和10对的数量记录下来。如果该位10对数量大于01对,即将这一位异或1反转。否则该位就是0。#include<bi
2020-10-28 19:05:22 299
原创 CF1400E. Clear the Multiset(分治,递归)
题目链接:https://codeforces.ml/contest/1400/problem/E描述:给出序列a,有两种操作:1.将区间[l,r]的数减一。2.将a[x]变为0.求将a全变为0最少的操作步数。n<=5000,0<=a[i]<=1e9;分析:区间由0被分为若干个小区间,每个区间若经过x次操作一后,无法消去>=x个数,则说明操作二更优。所以可以分治,对一个区间,找出最小值min,然后进行min次操作一,将区间分文若干小区间,然后在解决小区间。
2020-10-04 10:55:28 158
原创 CF723E. One-Way Reform(欧拉回路)
题目链接:https://codeforces.ml/contest/723/problem/E描述:给出一个无向图,确定边的方向,是入度等于出度的点最多。分析:有一个重要的定理:一个无向图度数为奇数的点必有偶数个。所有度数为偶数的点均可以满足出度等于入度。所以可以将所有度数是奇数的点连向虚点n+1,这样新建的图满足欧拉回路,跑一边欧拉回路,便可得到边的方向。输出时与0相连的边注意删掉。#include<bits/stdc++.h>#define N 210#d
2020-10-04 10:46:00 79
原创 CF1426 F. Number of Subsequences
题目链接:http://codeforces.com/contest/1426/problem/F描述:给出一个由a,b,c,?组成的字符串S,?可以变为a,b,c其中任何一个,求在s的所有可能情况中会有多少子序列abc。3≤n≤200000分析:a[i]表示到i一共有多少‘a’,b[i],c[i],d[i]分别是'b','c','?'。若没有'?',则只需要在每个b出现的位置i,以该b为中心计算贡献,即ans+=a[i-1]*(c[n]-c[i]);加上'?'以后,分为四种情况。a???b
2020-10-01 00:31:48 153
pagerank算法实现 与 networkX进行对比 爬取真实网站数据
2024-01-04
数据库课设 火车票售票系统
2024-01-03
五子棋 c++ 支持人机对战 人人对战 人机对战测试平台达到90+
2024-01-03
uno游戏 c++ 人机对战 人人对战
2024-01-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人