C#贝塞尔曲线的应用-未读红点拖拽粘连效果

2023-10-31

前言

提示:仿照手机qq未读红点拖拽粘连效果

贝塞尔曲线的应用非常广泛,本篇文章将使用Winform贝塞尔曲线来实现QQ未读红点拖拽粘连的效果


手机QQ粘连效果

在这里插入图片描述

最终实现的效果

在这里插入图片描述

分析效果

  • 1.可以看出随着拖拽的距离变大,固定点的圆会逐渐变小
  • 2.粘连效果是一个由两个小球边缘位置贝塞尔曲线构成,所以需要计算出两个小球边缘的点 A,B,C,D和两条贝塞尔曲线的控制点E,F
    在这里插入图片描述

核心公式

计算按下的位置到中心点的距离

通过公式c^2 = a^2+b^2 带入到代码为

// 计算两点距离公式  c^2 = a^2+b^2
int y2 = mouse_point.Y - (this.Height / 2);
int x2 = mouse_point.X - (this.Width / 2);
distance = Math.Sqrt(y2 * y2 + x2 * x2);

计算出按下位置到中心点的角度

 // 计算角度公式
degree = Math.Atan2(y2, x2) * 180 / Math.PI;
Console.WriteLine(degree);

边缘点的计算

边缘的点的可以用三角函数公式计算得到

在这里插入图片描述

// 小球一侧的点
var angle = (degree + 90) / 180 * Math.PI;
float x1 = Convert.ToSingle(radius * 0.5f * Math.Cos(angle) + (this.Width / 2));
float y1 = Convert.ToSingle(radius * 0.5f * Math.Sin(angle) + (this.Height / 2));

// 另一侧的点
var angle2 = (degree - 90) / 180 * Math.PI;
float x2 = Convert.ToSingle(radius * 0.5f * Math.Cos(angle2) + (this.Width / 2));
float y2 = Convert.ToSingle(radius * 0.5f * Math.Sin(angle2) + (this.Height / 2));

贝塞尔控制点的计算

两个控制点的位置刚刚在球心连线的1/4和3/4处

// 两个圆之间的1/4 和 3/4 点,就是三阶贝塞尔的两个控制点
var angle3 = degree / 180 * Math.PI;
float control_x1 = Convert.ToSingle(distance * 0.25f * Math.Cos(angle3) + (this.Width / 2));
float control_y1 = Convert.ToSingle(distance * 0.25f * Math.Sin(angle3) + (this.Height / 2));

float control_x2 = Convert.ToSingle(distance * 0.75 * Math.Cos(angle3) + (this.Width / 2));
float control_y3 = Convert.ToSingle(distance * 0.75 * Math.Sin(angle3) + (this.Height / 2));

完整代码

本效果有使用C#语言实现,其他语言道理相同

1.创建自定义控件 重写OnMouseDown OnMouseUp OnMouseMove 方法来获取当前鼠标响应的事件
2.重写控件的OnPaint方法, 绘制出中心点和鼠标按下的点
3.使用GraphicsPath 添加贝塞尔曲线,并连接各点,填充实现


点这里下载完整源码

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#贝塞尔曲线的应用-未读红点拖拽粘连效果 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 记录ViewPager+fragment 内存泄露问题

    首先是检测内存泄露的最大利器 Leakcanary 依赖和接入很是简单 debugImplementation com squareup leakcanary leakcanary android 1 6 3 releaseImplemen
  • 计算机顶级会议的历年最佳文章 (1996-2013)

    本人博客地址 http blog csdn net wanrenwangxuejing Best Paper Awards in Computer Science since 1996 By Conference AAAI ACL CHI
  • SmartFusion从FPGA到ARM(一)——MSS_GPIO点灯

    文章目录 前言 0 开发环境准备 1 创建一个基本工程 2 配置MSS模块 3 生成示例工程 4 Keil编译ARM工程 5 FPGA工程加载Hex文件 6 下载运行 7 JTAG SEL管脚说明 示例工程下载 前言 本系列教程 将会以Sm
  • 【Redis】数据结构---String

    文章目录 String 字符串 1 Redis 键 key 2 String 字符串 2 1常用命令 2 2 String底层结构 3 空间分配策略 3 1空间预分配 3 2惰性空间释放 3 3为什么SDS的最大长度是512M 4 SDS面
  • MySQL Community Server的安装配置教程(Windows版本)

    1 了解MySQL Community Server MySQL Community Server是开源的MySQL数据库服务的名称 它是MySQL AB在2000年推出的一个开源数据库服务器 现在由Oracle公司维护和管理 MySQL
  • mac 升级系统到 bigsur navicat 打不开 找回本地保存的查询sql文件

    1 建议直接下载新版navicat https macwk com soft navicat premium 2 或者手动搜 直接访达搜navicat 搜到的目录里挨个进去看看 我的文件是在下面找到的 Navicat CC Common S
  • 毕设学习(一)——三相并网逆变器的simulink仿真

    毕设学习 一 三相并网逆变器的Simulink仿真 本系列将记录我的毕设学习过程 同时分享我的学习内容 欢迎大家讨论交流 如有错误还望大佬指正 文章目录 毕设学习 一 三相并网逆变器的Simulink仿真 前言 一 三相并网逆变器 二 Si
  • C 51单片机串口控制LED

    实验名称 串口控制LED和蜂鸣器 接线说明 实验现象 下载程序后 由串口助手以HEX格式发送如下命令控制LED和蜂鸣器 D1指示灯亮发送 11 0D 0A D1指示灯灭发送 10 0D 0A 蜂鸣器响发送 21 0D 0A 蜂鸣器停发送 2
  • pycharm如何找到python解释器,pycharm找不到解释器怎么办

    解决方法 1 打开磁盘 直接搜索python exe文件 获取该文件的路径 2 打开pycharm软件 依次点击 File Setting Project 点击右上角的设置图标 3 按照获取的路径找到python exe即可 IDi少儿编程
  • 谷粒学院SpringSecurity认证流程详解

    登录功能前端分析 前端会调用此接口去实现登录 登录 export function login username password return request url admin acl login method post data us
  • protobuf ubuntu 18.04环境下安装

    t20190518 luo luo All Series MyFile t20190518 luo luo All Series MyFile t20190518 luo luo All Series MyFile t20190518 lu
  • sharding-jdbc行分片策略默认不支持按分片键的范围查询

    目录 sharding jdbc行分片策略默认不支持按分片键的范围查询 原因 使用行分片策略 解决方案 使用标准分片策略 sharding jdbc 分片策略 sharding jdbc行分片策略默认不支持按分片键的范围查询 在开发时 对主
  • 网络空间安全概论 第八章 作业

    返回 本次得分为 12 00 16 00 本次测试的提交时间为 2020 02 15 如果你认为本次测试成绩不理想 你可以选择再做一次 1 判断 2分 在iOS的安全机制中 具有代表性的有权限分离 强制代码签名 地址空间随机分布和沙盒 由于
  • android AudioRecord

    AudioRecord是Android中用于音频录制的类 它的主要作用是捕获来自设备麦克风或其他音频源的音频数据 并将其保存为PCM格式的音频流 以供后续处理或存储 以下是关于AudioRecord的一些常见用途和基本使用方法 作用和用途
  • 国际化之表单校验

    国际化之表单校验 国际化整个项目的时候 表单校验的提示是个麻烦的事情 很多资料说用vee validate插件来实现这个功能 但是我觉得有点麻烦 不是很想用插件 然后就在validate js里面去捣鼓 然后发现在我们校验方法下是可以获取到
  • 数据库的事务

    以MySQL为视角 了解数据库的事务 目录 一 事务简介 1 概念 2 操作 3 例子 4 事务提交方式 二 事务的四大特征 ACID 1 原子性 atomicity 2 一致性 consistency 3 隔离性 isolation 4
  • Python: 用于计算txt文档的字数的小脚本

    在一次实践中 需要计算txt文档 英文和数字 的字数 并且还要统计路径下的所有txt文档的字数总数 本来以为很简单 但是在编写的过程中还是出现了一些问题 首先就是 字数和字符数是不一样的 不能简单的用len 根据英文的特性 每个单词都需要空
  • VUE iscroll

    https github com Dafrok vue iscroll view 基本使用方法 npm i vue iscroll view save dev npm i iscroll save dev import IScrollVie
  • uniapp scroll-view 隐藏滚动条

    如果是想全局隐藏的话 可以放在App vue中 如果是局部则在对应的页面中引入使用即可 ifdef MP WEIXIN APP PLUS webkit scrollbar display none width 0 important hei
  • C#贝塞尔曲线的应用-未读红点拖拽粘连效果

    前言 提示 仿照手机qq未读红点拖拽粘连效果 贝塞尔曲线的应用非常广泛 本篇文章将使用Winform贝塞尔曲线来实现QQ未读红点拖拽粘连的效果 手机QQ粘连效果 最终实现的效果 分析效果 1 可以看出随着拖拽的距离变大 固定点的圆会逐渐变小