BS版图形系统 - 画线

ggplot2图形语法核心:图层叠加、标度控制与出版级图表构建 ggplot2不是绘图函数,而是基于图形语法(Grammar of Graphics)的声明式可视化系统。其核心原理在于将图表解构为数据、映射、几何、统计、标度、坐标系和主题七层可组合单元,通过图层叠加(+)实现惰性编译与逻辑解耦。这种设计赋予图表极强的可复用性、可维护性与出版适应性——支持自动分面、智能误差线渲染、色盲友好标度(如viridis)、多设备中文导出(cairo_pdf/showtext)等关键能力。广泛应用于生物信息学热图、临床试验趋势图、经济学面板可视化等需高解释性与审稿鲁棒性的科研场景。 阅读详情

BS版图形系统 - 画线


一晃两个月过去了,儿子也考了个喜欢的大学,重新,又稳定了下来。
我也重操旧业,编点小程序。时不时发个小博客,自娱自乐一下。
今天处理图元 - 线。
话不多说,直接上代码。

export class TLine extends TTwoPointMeta {
    beginArrow: TArrow = new TArrow;
    endArrow: TArrow = new TArrow;
    Initial() {
        this.setClassType(CbwClassType.Line);
        super.Initial();
    }

    RefreshConnectPoints() {
        this.newDefaultConnectPoint(1);
        let r = this.boundRect;
        this.SetConnectPoint(0, r.xCenter, r.yCenter);
    }
    containBrush(): boolean { return false; }
    doDraw(ctx: CanvasRenderingContext2D) {
        if (!this.LastPoint.IsValid) return;
        if (this.ApplyPen(ctx) != 0) {
            ctx.moveTo(this.toCanvasX(this.points[0].x), this.toCanvasY(this.points[0].y));
            ctx.lineTo(this.toCanvasX(this.points[1].x), this.toCanvasY(this.points[1].y));
            ctx.stroke();
            ctx.fillStyle = this.LineColor.toString();
            let theta = this.points[0].thetaToPoint(this.points[1]);
            this.beginArrow.doDraw(ctx, new TPoint(this.toCanvasX(this.points[0].x), this.toCanvasY(this.points[0].y)), 180 + theta, this.paintBox!.Ratio);
            this.endArrow.doDraw(ctx, new TPoint(this.toCanvasX(this.points[1].x), this.toCanvasY(this.points[1].y)), theta, this.paintBox!.Ratio);
        }
    }

    doPaintForSelect(ctx: CanvasRenderingContext2D, idx: number) {
        ctx.moveTo(this.toCanvasX(this.points[0].x), this.toCanvasY(this.points[0].y));
        ctx.lineTo(this.toCanvasX(this.points[1].x), this.toCanvasY(this.points[1].y));
        ctx.stroke();
        let theta = this.points[0].thetaToPoint(this.points[1]);
        this.beginArrow.doDraw(ctx, new TPoint(this.toCanvasX(this.points[0].x), this.toCanvasY(this.points[0].y)), 180 + theta, this.paintBox!.Ratio);
        this.endArrow.doDraw(ctx, new TPoint(this.toCanvasX(this.points[1].x), this.toCanvasY(this.points[1].y)), theta, this.paintBox!.Ratio);
    }

    get Length(): number {
        let result = this.points[0].DistanceTo(this.points[1]);
        result = Math.floor(result * 100 + 0.5);
        result = result / 100;
        return result;
    }
    set Length(value: number) {
        let theta = this.points[0].thetaToPoint(this.points[1]);
        this.points[1].x = this.points[0].x + value * Math.cos(theta);
        this.points[1].y = this.points[0].y + value * Math.sin(theta);
        this.updateBorder();
    }

    SaveToXmlNode(parentXmlNode: CbwXmlNode): CbwXmlNode {
        let thisNode = super.SaveToXmlNode(parentXmlNode);
        new TEnum(NArrow, NArrow.None).SaveToXmlNode(thisNode, "beginType", this.beginArrow.type);
        if (this.beginArrow.length != 20) thisNode.AddAttribute("beginLength", this.beginArrow.length.toString());
        if (this.beginArrow.theta != 30) thisNode.AddAttribute("beginTheta", this.beginArrow.theta.toString());
        new TEnum(NArrow, NArrow.None).SaveToXmlNode(thisNode, "endType", this.endArrow.type);
        if (this.endArrow.length != 20) thisNode.AddAttribute("endLength", this.endArrow.length.toString());
        if (this.endArrow.theta != 30) thisNode.AddAttribute("endTheta", this.endArrow.theta.toString());
        return thisNode;
    }

    LoadFromXmlNode(thisNode: CbwXmlNode): CbwXmlNode {
        super.LoadFromXmlNode(thisNode);
        this.beginArrow.type = new TEnum(NArrow, NArrow.None).LoadFromXmlNode(thisNode, "beginType");
        this.beginArrow.length = thisNode.IntAttributeValueByName("beginLength", "20");
        this.beginArrow.theta = thisNode.IntAttributeValueByName("beginTheta", "30");
        this.endArrow.type = new TEnum(NArrow, NArrow.None).LoadFromXmlNode(thisNode, "endType");
        this.endArrow.length = thisNode.IntAttributeValueByName("endLength", "20");
        this.endArrow.theta = thisNode.IntAttributeValueByName("endTheta", "30");
        return thisNode;
    }

    DrawHint(ctx: CanvasRenderingContext2D) {
        if (this.currentPointIndex > 0) {
            let rect = new Rect().From(this.points[0], this.points[1]);
            DrGraph.TCanvas.DrawHint_Length(ctx, this.toCanvasPoint(this.points[1].add(-5, 5)), this.toCanvasPoint(this.points[0].add(-5, 5)), rect.dialogLength);
            DrGraph.TCanvas.DrawHint_Angle(ctx, this.toCanvasPoint(this.points[1]), this.toCanvasPoint(this.points[0]))
        }
    }
}

这种代码都烂大街的,好象也没什么解释的必要,毕竟我也是从网上借鉴过来的。
在这里插入图片描述
拿走不谢。

一个BS架构软件的原型设计 一个BS 架构软件的 原型设计 项目调研与原型设计之间,最好有个UE调研,先出几个主要的UE界面,再出原型,不然后期的修改会增大! 答复:你所说的UE调研,其实已经包含在需求调研中了,当然也体现在原型上了,这个过程没有独立做,肯定不会做到很完善,但是项目管理与产品设计是有区别的,比如: 产品设计,除注重产品功能外,还有很如用户体验、市场、竞争对手等等情况; 项目管理,项目没有绝对完美,只有项目经理去引导客户的需求,直到验收并拿到验收款,讲究的是项目的实施成本、利润空间等。 所以,两者过程都会涉及到产品的设计等,但目标是不同的 立即下载

相关推荐

协方差矩阵

对两个类内协方差矩阵进行对角化,可以将它们变换为对角矩阵。这个过程可以通过对每个协方差矩阵进行特征值分解来实现,从而得到它们的特征向量和特征值,进而得到它们的对角矩阵形式。这个过程的意义在于,它可以帮助我们找到一个新的坐标系,使得在这个坐标系下,每个特征之间都是独立的,从而简化了计算。具体来说,当我们使用对角协方差矩阵作为特征向量的坐标系时,它意味着每个特征之间都是相互独立的,从而方便了进一步的分析和处理。在实际应用中,对角化协方差矩阵可以用于降维、特征选择和分类等任务。

m0_55196097的博客 1万+

一文看懂架构图怎么画

什么是架构图?维基百科、百度百科其实都没有关于它的直接定义。架构图=架构+图这样问题就转化成,什么是架构,以及什么是图?架构,又名软件架构,是有关软件整体结构与组件的抽象描述,于指导型软件系统各个方面的设计。

了解➔熟悉➔掌握➔精通 4313

深入了解torch框架

大国的游戏,政府支持到位,是未来;AI : Artificial Intelligence,旨在研究、开发能够模拟、延伸和扩展人类智能的理论、方法、技术及应用系统,是一种拥有自主学习和推理能力的技术。它模仿人类大脑某些功能,包括感知、学习、理解、决策和问题解决。AI本质​ NLP(说话,听)、CV(眼睛)、自动驾驶、机器人(肢体动作)、大模型三要素:数据、网络、算力① 神经网络:找到合适的数学公式;② 训练:用已有数据训练网络,目标是求最优解;③ 推理:用模型预测新样本;PyTorch,简称Torch

qq_74732076的博客 1136

B/S 三层架构 简单思维导图

B/S三层架构的浅见,如有问题,望指正

m0_46357237的博客 5698

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2131

【人工智能】提示词工程:让大模型精准响应的核心技术,提示词的基础框架 以及 常见提示词框架及场景

编写提示词的基础原则包括:简单、明确、详细,提示词拥有零样本提示、少样本提示、分配角色、提示写作风格、限定输出格式等技巧。

奶爸的编程之路,也就一周冷个三天 1138

软件体系结构—B/S和C/S架构

在进行软件开发时,通常会在两种基本架构中进行选择,即C/S架构和B/S架构。1.C/S结构C/S架构是客户端/服务器端交互模式,是Client/Server的简称。它是早期常用的一种软件架构,这种架构的软件需要在用户的电脑上安装客户端程序,下面通过一张图来了解C/S架构客户端与服务器的交互过程。如图1-1所示:图1-1 C/S架构图2.B/S结构B/S架构是浏览器/服务器交互模式,是Browser...

cdy的博客 2万+

Android性能优化之Android Profiler

在移动应用开发中,打造一个流畅、省电且不卡顿的用户体验是至关重要的。然而,随着应用功能的日益复杂,内存泄漏、CPU暴涨、网络卡顿以及电量消耗过快等问题常常化身为隐形杀手,悄悄吞噬着用户体验。为了帮助开发者精准定位并解决这些性能瓶颈,谷歌在Android Studio中集成了一款强大的一站式性能分析工具Android Profiler。Android Profiler作为Android Studio内置的实时数据可视化工具,支持运行在Android 5.0及更高版本的设备上。

xiangzhihong8的专栏 201

006-BS架构

1. 颜色由红色、绿色、蓝色混合而成。 2. 如今的计算机已经有处理数百万种颜色的能力。 3. 颜色值 3.1. 颜色由一个十六进制符号来定义, 这个符号由红色、绿色和蓝色的值组成(RGB)。 3.2. 每种颜色的最小值是0(十六进制:#00)。最大值是255(十六进制:#FF)。 3.3.这个表格给出了由三种颜色混合而成的具体效果 4. 颜色名 4.1. 大多数的浏览器都支持颜色名集合。 4.2. 仅仅有16种颜色名被W3C的html 4.0标准所支持。它们是: aqua, blac.

aihiao的专栏 2594

【100%通过率】2024华为OD机试真题E卷 C++ 实现【栈数据合并/空栈压数】

向一个空栈压入正整数,每当压入一个整数时,执行以下规则(设: 栈顶至栈底整数依次编号为n1、n2...nx, n1为最新压入的整数)

MISAYAONE的博客 1553

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4758

BS项目——架构能力

BS项目——架构能力 spring框架可谓各式各样,相信用springboot+mybatis-plus做过项目的人都了解过mybatis-plus自动生成代码,那么一键生成代码,增删改查数据库,项目所需接口自动生成还远吗?所以未来不想被无情淘汰,做项目的基本能力要掌握,架构一个项目,从画图开始😎 一、需求分析 真理:一切需求来自甲方 用例图,类图,时序图,思维导图 工具:visio,xmind visio功能了解一下,在数学建模中画流程图必备,这里主要说明作为UML工具如何使用 一、【快速使用图表】

m0_52712579的博客 2096

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

画出B/S三层架构概念图,简述其基本工作机理。

转载于:https://www.cnblogs.com/zut-syp/p/10543672.html

weixin_30832405的博客 1175

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

阿里巴巴技术专家三画:如何画好架构图

技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。 本文作者阿里巴巴技术专家三画,分享了自己和团队在画好架构图方面的理念和经验,首发于阿里内部技术分享平台,阿里巴巴中间件授权转载,梓敬、鹏升和余乐对此文亦有贡献。 当我们想用一张或几张图来描述我...

勇往直前的专栏 1010

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

BS版图形系统 - Ribbon Gallery

BS版图形系统 - Ribbon Gallery先准备相应图标实现资源配置初步效果上下箭头按钮处理下一步工作 今天尝试做一个Ribbon Gallery效果 直接参考PPT效果 当然,感觉在网页里,占用空间少一些好,所以把各图标间距整小一点。 先准备相应图标 实现 export class TRibbonGallery extends TPanel { rightPanel: TPanel; btnUp: TButton; btnMid: TButton; btnDown

drgraph的博客 372

B/S架构和C/S架构

C/S架构简要介绍 在了解什么是B/S架构之前,我们有必要了解一下什么是C/S架构: C/S架构是第一种比较早的软件架构,主要用于局域网内。也叫 客户机/服务器模式。 它可以分为客户机和服务器两层: 第一层: 在客户机系统上结合了界面显示与业务逻辑; 第二层: 通过网络结合了数据库服务器。 简单的说就是第一层是用户表示层,第二层是数据库层。   这里需要补充的是,客户端不仅仅是一些简单的操作,...

YAYA776的博客 1691

JAVAWeb01-BS架构简述、HTML

BS架构、HTML

weixin_42482333的博客 6464

BS框架说明

架构,包含前端、后端、数据库三大组成部分。,还有很多高级的前端框架,如。)组成的系统的框架结构。

m0_62110645的博客 2346

计算机b s架构模式图,深入理解B/S架构

最近看招聘信息很多都要求理解B/S架构,自己面试时也被问到过这个问题,查找了一些资料,整理出这篇博客。一: B/S的概念B/S(Brower/Server,浏览器/服务器)模式又称B/S结构,是Web兴起后的一种网络结构模式。浏览器是客户端最主要的应用软件,客户机上只需要安装一个浏览器,浏览器通过Web Server(网站服务器)同数据库进行数据交互,浏览器负责界面显示逻辑和极少数的事务逻辑,主要...

weixin_27014595的博客 1万+

常见B/S系统架构设计

要点 一:前端架构     前端是通常是指用户的请求到达应用服务器之前经历的环节,一般不包括业务逻辑,不处理动态数据。     1.浏览器优化技术     并不是优化浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存、合并HTTP减少请求次数、使用页面压缩等。     2.CDN   &n...

weixin_42408447的博客 6300

计算机毕业设计之jsp青岛黄海学院志愿者服务系统的设计与实现

青岛黄海学院志愿者服务系统分为三个部分,即管理员和用户、活动管理。该系统是根据用户的实际需求开发的,贴近生活。管理员拥有最大的权限,其次是用户,最后是活动管理。管理员点击活动报名管理,在活动报名管理页面对活动名称、活动类型、活动地点、报名时间、报名说明、管理账号、账号、姓名、手机、是否审核、审核回复等信息,可以查询或删除活动报名等操作。基于这种情况,我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题,满足用户需求。活动管理、用户、志愿活动、活动报名、发起签到、签到信息、活动时长。

2401_85506100的博客 243

画图理解BS模式

XiaoZeng941101的博客 887

BSChartView画折线图,柱形图,圆饼图

BSChartView 一个支持画折线图,柱状图,圆饼图的工具 支持双Y轴显示,支持左右滑动,支持自定义样式。 效果 gitHub地址:https://github.com/FreeBaiShun/BSChartView pod集成 pod ‘BSChartView’ 用法 类似于tableView的使用 // // ViewController.m // // Created by ...

qq_17190231的博客 402
上一篇: BS版图形系统 - 中文录入
下一篇: BS版图形系统 - 矩形
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值