使用c#制作坐标

1、建立坐标

2、坐标系的放大缩小

3、标定刻度

4、实时显示鼠标在坐标系上的坐标

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace coordinates
{public partial class Form1 : Form{private PictureBox pictureBox;private float zoomFactor = 1.2f;   //初始放缩因子private float zoomLevel = 1.0f;   //每次滚动缩放变化的步长private Point offset;              // 视图偏移量public Form1(){InitializeComponent();// 初始化 PictureBoxpictureBox = new PictureBox{Dock = DockStyle.Fill,         //填满窗体SizeMode = PictureBoxSizeMode.AutoSize};this.Controls.Add(pictureBox);// 订阅 Paint 事件pictureBox1.Paint += PictureBox_Paint;// 为pictureBox1的MouseWheel事件添加处理程序this.pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel);//订阅鼠标移动事件this.pictureBox1.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);}private string fullname = null;//图像文件完整路径public Form1(string a){InitializeComponent1();fullname = a;}private int originalWidth;private int originalHeight;private void InitializeComponent1(){// 初始化 PictureBox 的原始大小originalWidth = pictureBox1.Width;originalHeight = pictureBox1.Height;// 其他初始化代码}//鼠标滚轮事件private void pictureBox1_MouseWheel(object sender, MouseEventArgs e){// 根据鼠标滚轮的滚动方向调整缩放级别if (e.Delta > 0){zoomLevel *= 1.1f; // 放大}else{zoomLevel /= 1.1f; // 缩小}// 确保缩放级别在合理范围内(放大到最大,缩小到最小)zoomLevel = Math.Max(0.1f, Math.Min(1.0f, zoomLevel));// 重新绘制 PictureBoxpictureBox1.Invalidate();}//画板制作--网格坐标private void PictureBox_Paint(object sender, PaintEventArgs e){// 网络坐标Graphics g = e.Graphics;Pen gridPen = new Pen(Color.LightGray, 1); // 网格线的颜色和宽度Font font = new Font("Arial", 8);SolidBrush brush = new SolidBrush(Color.Black);  //实例画刷// 获取 PictureBox 的尺寸int width = pictureBox1.Width;int height = pictureBox1.Height;// 根据放缩级别调整网格线的绘制间隔int gridSize = (int)(15 / zoomLevel); // zoomLevel步长// ———————————绘制网格坐标线————————————//水平线for (int i = width / 2; i <= width; i += gridSize){g.DrawLine(gridPen, i, 0, i, height);}for (int i = width / 2 - gridSize; i >= 0; i -= gridSize){g.DrawLine(gridPen, i, 0, i, height);}// 垂直线for (int i = height / 2; i <= height; i += gridSize){g.DrawLine(gridPen, 0, i, width, i);}for (int i = height / 2 - gridSize; i >= 0; i -= gridSize){g.DrawLine(gridPen, 0, i, width, i);}// 绘制坐标轴Pen axisPen = new Pen(Color.Black, 2);axisPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; // 设置为虚线g.DrawLine(axisPen, 0, height / 2, width, height / 2); // X轴g.DrawLine(axisPen, width / 2, 0, width / 2, height); // Y轴// 绘制顶部刻度线// 假设你想让刻度值从 0 开始,每条刻度线增加 1int scaleValue = 0;for (int i = width / 2; i <= width; i += gridSize){g.DrawLine(axisPen, i, 0, i, 5); // 顶部刻度线g.DrawString(scaleValue.ToString(), font, brush, i - 5, 10); // 顶部刻度值//scaleValue++;scaleValue += 5;}scaleValue =0;for (int i = width / 2 ; i >= 0; i -= gridSize){g.DrawLine(axisPen, i, 0, i, 5); // 顶部刻度线g.DrawString(scaleValue.ToString(), font, brush, i - 5, 10); // 顶部刻度值scaleValue -= 5;}// 绘制左侧刻度线// 假设你想让刻度值从 0 开始,每条刻度线增加 1int leftScaleValue = 0;for (int i = height / 2; i <= height; i += gridSize){g.DrawLine(axisPen, 0, i, 5, i); // 左侧刻度线g.DrawString(leftScaleValue.ToString(), font, brush, 10, i - 5); // 左侧刻度值leftScaleValue -= 5;}leftScaleValue = 5;for (int i = height / 2 - gridSize; i >= 0; i -= gridSize){g.DrawLine(axisPen, 0, i, 5, i); // 左侧刻度线g.DrawString(leftScaleValue.ToString(), font, brush, 10, i - 5); // 左侧刻度值leftScaleValue += 5;}//刻度线边缘线Pen sige_Pen = new Pen(Color.Black, 2);sige_Pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; // 设置为实线g.DrawLine(sige_Pen, 0, 0, width,0); g.DrawLine(sige_Pen, 0, 0, 0, height);g.DrawLine(sige_Pen, width, 0, width, height);g.DrawLine(sige_Pen, 0, height, width, height);}private void pictureBox1_Click(object sender, EventArgs e){}private void pictureBox1_MouseDown(object sender, MouseEventArgs e){}//鼠标移动事件private void pictureBox1_MouseMove(object sender, MouseEventArgs e){// 计算鼠标相对于中心点的偏移量(原点)int centerX = pictureBox1.Width / 2;         int centerY = pictureBox1.Height / 2;// 获取相对中心点的偏移量并根据缩放级别进行调整float gridX = ((e.X - centerX) * zoomLevel / 15)*5;float gridY = ((centerY - e.Y) * zoomLevel / 15)*5;// 显示当前的网络坐标textBox1.Text = $"X: {gridX:F2}, Y: {gridY:F2}";}private void pictureBox1_MouseDown_1(object sender, MouseEventArgs e){}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM实战—JVM内存设置与对象分配流转

1.JVM内存划分的原理细节 (1)背景引入 接下来介绍JVM内存的分代模型&#xff1a;新生代、老年代、永久代。现在已知代码里创建的对象&#xff0c;都会进入到Java堆内存中。如下所示&#xff0c;main()方法会周期性执行loadReplicasFromDisk()方法来加载副本数据。 public class…

node.js和js

JavaScript 核心语法 (ECMAScript) 变量和作用域&#xff1a;var、let、const声明&#xff0c;作用域链。数据类型和结构&#xff1a;基本数据类型&#xff08;Undefined、Null、Boolean、Number、BigInt、String、Symbol&#xff09;&#xff0c;复合数据类型&#xff08;对象…

设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)

前言&#xff1a; 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块&#xff0c;可以分为以下几个主要部分&#xff1a;摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计&#xff0c;涵盖…

嵌入式单片机中Flash存储器控制与实现

第一:嵌入式单片机内部Flash概述 1.存储器的概念 存储器指的是若干个存储单元的集合,每个存储单元都可以存储若干个二进制数,为了方便的操作存储单元,就为每个存储单元都分配了地址,就可以通过寻址来访问存储单元。由于计算机的处理的数据量较大,并且运算速度都很快,就…

Debian 12 安装配置 fail2ban 保护 SSH 访问

背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…

ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire 前言一、安装二、相关代码1.代码片段2.代码片段3.运行效果 三、测试代码1.即发即弃作业2.延迟作业3.重复作业4.延续作业5.页面调度作业 前言 &#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f33e;&#x1f4dd;记录学习成果&#xff0c;以…

实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144738332 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

【Ubuntu 20.4安装截图软件 flameshot 】

步骤一&#xff1a; 安装命令&#xff1a; sudo apt-get install flameshot 步骤二&#xff1a; 设置快捷方式&#xff1a; Ubuntu20.4 设置菜单&#xff0c;点击 号 步骤三&#xff1a; 输入软件名称&#xff0c; 软件快捷命令&#xff08;flameshot gui&#xff09;&am…

ue5 pcg(程序内容生成)真的简单方便,就5个节点

总结&#xff1a; 前情提示 鼠标单击右键平移节点 1.编辑-》插件-》procedural->勾选两个插件 2.右键-》pcg图表-》拖拽进入场景 3.先看点point 右键-》调试(快捷键d)->右侧设置粒子数 3.1调整粒子数 可以在右侧输入框&#xff0c;使用加减乘除 4.1 表面采样器 …

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介

1. 基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化&#xff01; 动态 web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xf…

CTFshow-SSRF文件上传

web351 <?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); ?> 构造POST …

Vue3项目的换肤思路

1. 整体架构 项目采用了 Vue3 Vuex 的技术栈来实现换肤功能&#xff0c;主要包含以下几个核心部分&#xff1a; 主题配置文件&#xff08;src/utils/theme.js&#xff09;主题切换组件&#xff08;src/components/ThemeSwitch.vue&#xff09;主题状态管理&#xff08;src/s…

信息安全管理:信息安全组织管理策略

信息安全组织管理目的是建立信息安全责任体系和定义组织内的信息安全责任&#xff0c;建立清晰的信息安全责任体系是实现信息安全目标的保证。 一、信息安全组织架构与职责定义 信息安全组织为跨部门协调组织&#xff0c;由信息安全领导组、信息安全管理组、信息安全执行组、…

线性代数行列式

目录 二阶与三阶行列式 二元线性方程组与二阶行列式 三阶行列式 全排列和对换 排列及其逆序数 对换 n阶行列式的定义 行列式的性质 二阶与三阶行列式 二元线性方程组与二阶行列式 若是采用消元法解x1、x2的话则得到以下式子 有二阶行列式的规律可得&#xff1a;分…

Gaea学习笔记总结

Gaea 是一款地形创建软件,它内置了丰富的地貌节点,能快速生成像山脉、荒原峡谷、河流、湖泊等地貌特征。 节点解释使用方法概述Primitives(基本体)Constant(常数)创建输出,一般用来输出Hight,Color,Noise,很少直接使用,而是用来连接上一个节点。一般用来输出Hight,…

OpenCV相机标定与3D重建(37)计算两幅图像之间单应性矩阵(Homography Matrix)的函数findHomography()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵&#xff08;Homography Matrix&#xff09;的…

Pinpoint 是一个开源的分布式追踪系统

pinpointagent2.2.2.tar 是 Pinpoint 的一个版本&#xff0c;Pinpoint 是一个开源的分布式追踪系统&#xff0c;专门用于对 Java 应用程序进行性能监控、日志记录和故障诊断。它可以帮助开发人员和运维人员追踪和分析微服务架构中服务之间的调用链&#xff0c;并进行性能分析。…

工作编码案例--UDP多播 和 本地套接字bind

问题一&#xff1a;组播绑定失效导致无法接收组播报文 背景&#xff1a; 项目中一个封装的库负责UDP绑定&#xff0c;使用配置文件中指定的组播地址。设备为降低功耗会进入休眠状态&#xff0c;休眠时需要卸载网卡。唤醒后重新加载网卡&#xff0c;但发现程序无法接收到组播报…

初探C语言|C语言中有哪些操作符呢?

文章目录 前言算术操作符示例 移位操作符原码,反码 与补码正数负数计算 左移<<右移>> 位操作符例题 赋值操作符单目操作符sizeof 操作符 关系操作符逻辑操作符短路现象 条件操作符逗号表达式下标引用、函数调用和结构成员表达式求值算术转换操作符属性 欢迎讨论: 如…

【USACO题库】1.2.3 Name That Number命名那个数字

这不是水题! 主页:点这里 题目描述 在威斯康辛州牛大农场经营者之中&#xff0c;都习惯于请会计部门用连续数字给母牛打上烙印。 但是,母牛用手机时并没感到这个系统的便利,它们更喜欢用它们喜欢的名字来呼叫它们的同伴&#xff0c;而不是用像这个的语句"Cmon, #4734, …