首页 > 其他分享 >画圆盘的指针

画圆盘的指针

时间:2023-09-08 16:45:58浏览次数:31  
标签:angle 圆盘 ea pictureBox1 centerX centerY Math 指针

效果图

 

       private Bitmap GetPointerImg(Bitmap pointerImg, float angle, int w, int h ,int centerX, int centerY)
        {
            // 创建新的位图作为旋转后的图片
            Bitmap rotatedImage = new Bitmap(w, h);

            // 创建一个Graphics对象,用于绘制旋转后的图片
            using (Graphics g = Graphics.FromImage(rotatedImage))
            {
                g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(centerX, centerY, 10, 10));

                // 设置旋转中心点为图片中心
                g.TranslateTransform(centerX, centerY);

                // 执行旋转
                g.RotateTransform(angle);

                // 恢复旋转中心点到原位置
                g.TranslateTransform(-centerX, -centerY);

                g.DrawImage(pointerImg, 0, centerY - pointerImg.Height / 2);
            }
            return rotatedImage;
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            int centerX = pictureBox1.Width / 2;
            int centerY = pictureBox1.Height / 2;
            var ea = (MouseEventArgs)e;
            double distance = Math.Sqrt(Math.Pow(ea.X - centerX, 2) + Math.Pow(ea.Y - centerY, 2));//点击处到圆心的距离
            double angle = Math.Asin((centerY - ea.Y) / distance) * 180 / Math.PI;
            if (centerX < ea.X && centerY > ea.Y) angle = 180- angle;//第一象限
            else if (centerX > ea.X && centerY < ea.Y) angle = 0;//第三象限
            else if (centerX < ea.X && centerY < ea.Y) angle = 180;//第四象限
            //double angle = 180 / (Math.PI * Math.Atan((centerY - ea.Y) / 1.0 * (centerX - ea.X)));
            text_Angle.Text = angle.ToString();
            var bmp = GetPointerImg(Resources.valsalvaThresholdPointer, (float)angle, pictureBox1.Width, pictureBox1.Height, 124, 124);
            pictureBox1.Image = bmp;
        }

        private void btn_DrawPointer_Click(object sender, EventArgs e)
        {
            var angle = Convert.ToDouble(text_Angle.Text);
            var bmp = GetPointerImg(Resources.valsalvaThresholdPointer, (float)angle, pictureBox1.Width, pictureBox1.Height, 124, 124);
            pictureBox1.Image = bmp;
        }

 

标签:angle,圆盘,ea,pictureBox1,centerX,centerY,Math,指针
From: https://www.cnblogs.com/chixiner/p/17687995.html

相关文章

  • 通过指针变量存取一维数组元素
    通过指针变量存取一维数组元素下面展示一下。#include<stdio.h>intmain(){ inta[10],*p; for(p=a;p<a+10;p++) { scanf("%d",p); }for(p=a;p<a+10;p++) { printf("%d",*p); } printf("\n"); return0;}测试输入......
  • 单词搜索 II(字典树、数组)、合并两个有序数组(数组、双指针)、验证回文串(双指针、字
    单词搜索II(字典树、数组)给定一个mxn二维字符网格board****和一个单词(字符串)列表words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一......
  • 学习使用双指针(leetcode)
    一、K和数对的最大数目(JAVA)给你一个整数数组nums和一个整数k。每一步操作中,你需要从数组中选出和为k的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。示例1:输入:nums=[1,2,3,4],k=5输出:2解释:开始时nums=[1,2,3,4]:-移出1和4,......
  • 双指针法删除数组里面的值
    你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明:为什么返回数......
  • 代码随想录刷题记录——双指针篇
    27.移除元素题目链接快慢指针,最终返回index值为移除元素后的数组末尾元素下标+1.#include<vector>usingnamespacestd;classSolution{public:intremoveElement(vector<int>&nums,intval){//快慢指针intnums_length=nums.size();......
  • 【C++】C++ 引用详解 ⑦ ( 指针的引用 )
    文章目录一、二级指针可实现的效果二、指针的引用1、指针的引用等同于二级指针(重点概念)2、引用本质-函数间接赋值简化版本3、代码示例-指针的引用一、二级指针可实现的效果指针的引用效果等同于二级指针,因此这里先介绍二级指针;使用二级指针作为参数,可......
  • 【C++】C++ 引用详解 ④ ( 函数返回 静态变量 / 全局变量 的 引用 / 指针 )
    文章目录一、函数返回静态变量/全局变量的引用/指针1、函数返回局部变量引用或指针无意义2、函数返回静态变量/全局变量的引用或指针3、代码示例-函数返回静态变量/全局变量的引用或指针一、函数返回静态变量/全局变量的引用/指针1、函数返回局部变量引用或指针......
  • 【C语言进阶】指针数组 —— 数组指针
    (文章目录)......
  • “指针跃动”受邀参加全球贸易服务峰会
    “指针跃动”受邀参加全球贸易服务峰会有“服”同享共赢未来引子在全球化日益盛行的今天,贸易不再仅仅是物质的交流,更涉及到服务、理念、文化和科技的共享。中国国际服务贸易交易会全球贸易服务峰会,就是这个趋势的集中体现。在这次峰会上,“指针跃动”受邀参加中国......
  • C进阶(指针)
    一维数组传参的几种形式(5种)voidtest(intarr[])//{}voidtest(intarr[10])//{}voidtest(int*arr)//{}voidtest2(int*arr[20])//{}voidtest2(int**arr)//{}intmain(){intarr[10]={0};int*arr2[20]={0};test(arr);test2(arr2);}二维数组传参的几......