用鼠标动态画圆

已知圆心坐标O(x,y),圆上一点的坐标A(xA,yA),用鼠标从A点顺时针方向画指定的度数。

需要注意,X轴的正方向是→,Y轴的正方向是↓,按顺时针方向画圆实际上角度是越来越小。

解题思路:画圆可以将圆的360°角划分为N等分,这里就划分为360等分,再获取每个度数所对应的圆上的点的坐标来画点,由点连成一个圆。

原理是利用圆的参数方程:
横坐标X=圆心横坐标+半径*Cos(弧度)
横坐标Y=圆心纵坐标+半径*Sin(弧度)

autoit代码如下:

Run("mspaint.exe")

Sleep(2000)

WinActivate("[class:MSPaintApp]")
WinSetState("[class:MSPaintApp]", "", @SW_MAXIMIZE);以上是调起画图工具,在画图工具上画圆
_DrawCircleByPoint(400,400,500,300)

Func _DrawCircleByPoint($iCenterX, $iCenterY, $iOnCircleX, $iOnCircleY, $iDegree = 360, $iDelay = 10, $iSpeed = 0, $pi = 3.14159265358979)
    Dim $iRadius = Sqrt(($iCenterX - $iOnCircleX) * ($iCenterX - $iOnCircleX) + ($iCenterY - $iOnCircleY) * ($iCenterY - $iOnCircleY))    ;get the radius

    If $iOnCircleX <= $iCenterX Then
        $doubleStartDegree = $pi - ACos(($iCenterX - $iOnCircleX)/$iRadius);二象限
        If $iOnCircleY > $iCenterY Then
            $doubleStartDegree = ACos(($iCenterX - $iOnCircleX)/$iRadius) + $pi    ;三象限
        EndIf
    Else
        $doubleStartDegree = ACos(($iOnCircleX - $iCenterX)/$iRadius);一象限
        If $iOnCircleY > $iCenterY Then
            $doubleStartDegree = 2*$pi - $doubleStartDegree;四象限
        EndIf
    EndIf

    $doubleStartDegree = $doubleStartDegree * 180 /$pi            ;get the degree

    _DrawCircle($iCenterX, $iCenterY, $iRadius, $doubleStartDegree, $iDegree, $iDelay, $iSpeed, $pi)
EndFunc

#cs
        $iCenterY = 圆心纵坐标
        $iCenterX = 圆心横坐标
        $iRadius = 圆半径
        $iDegree = 圆弧度数,缺省为360°
        $iDelay = 鼠标移动延时,单位为毫秒,缺省为 10
        $iSpeed = 鼠标移动速度,范围为 1(最快)-100(最慢),缺省为 0
        $pi = 圆周率 pi,缺省为 3.14159265358979
        eg:_Circle(@DesktopWidth / 2, @DesktopHeight / 2, 200, 180)
#ce
Func _DrawCircle($iCenterX, $iCenterY, $iRadius, $doubleStartDegree, $iDegree = 360, $iDelay = 10, $iSpeed = 0, $pi = 3.14159265358979)
    Local $iMouseX, $iMouseY

    For $i = $doubleStartDegree To $doubleStartDegree - $iDegree Step -1
        $iMouseX = $iCenterX + $iRadius * Cos($i * $pi / 180)
        $iMouseY = $iCenterY - $iRadius * Sin($i * $pi / 180)

        ConsoleWrite($i & @CRLF)
        Sleep($iDelay)
        MouseMove($iMouseX, $iMouseY, $iSpeed)
        MouseDown("left")
    Next

    MouseUp("left")
EndFunc   ;==>_Circle
时间: 2024-08-03 05:41:51

用鼠标动态画圆的相关文章

android自定义圆形进度条,实现动态画圆效果

自定义圆形进度条效果图如下:应用场景如动态显示分数等. view的自定义属性如下attr.xml <?xml version="1.0" encoding="UTF-8"?> <resources> <declare-styleable name="ArcProgressbar">         <!-- 圆环起始角度-->         <attr name="startAng

ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半径进行搜索(也就是缓冲区╮(╯_╰)╭). 这次的目标,就是要山寨这个拖拽画圆的功能,我先放一个效果图. 二.开始山寨 我们先想一想要实现这个功能需要哪些步骤. 拖拽 画圆 通知拖拽结束 2.1 实现拖拽 关于拖拽,有graphicslayer的拖拽事件和map的拖拽事件,如何选择呢?先来看一看官方

GMAP.NET控件画圆

关于GMAP.NET地图控件在地图上操作的例子很多,但是关于画圆形的描述很少,我找到了GMAP官方的例子并在此基础上进行了部分的改动,实现了对GMAP地图控件的画圆操作. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Drawing; 7 using System

openlayers实现画圆

概述: 本文讲述如何在openlayers中实现画圆. 效果: 实现思路: 1.画中心点 通过OpenLayers.Control.DrawFeature和OpenLayers.Handler.Point实现在地图上画圆心. 2.移动鼠标设置半径 画点结束后,激活地图的鼠标移动事件,获取圆心到鼠标点的距离,并画圆,将结果展示到地图上. 3.点击地图结束绘制 点击地图,结束绘制,将最终结果展示到地图上,并停止地图的鼠标移动事件. 实现代码: <html xmlns="http://www.w

python游戏pygame模块画圆及移动方法介绍

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: ss 4 5 import pygame 6 import sys 7 8 # 初始化 9 pygame.init() 10 11 size = width,height = 1000,600 # 设置屏幕尺寸 12 BLUE = 0,0,255 13 WHITE = 255,255,255 14 BLACK = 0,0,0 15 RED = 255,0,0 16 GREEN

简单谈谈自己对htm与css中画圆的理解。

近几天,在利用css编辑中,发现不少边框图像要求是矩形圆角或者直接画一个圆的例子,下面和大家一起分享下对画圆的看法. 在这次的分享中,我侧重给大家看一些例子来更好的理解, 我们都明白,画圆时要用到“border-radius:”,而且在每次画圆时,我们都应该先设定一个width和height. 那么我们可以这样理解, 我们的圆是在一个矩形(正方形)中进行裁剪的,而border-radius就是我们要裁剪的尺寸. 给大家一些图片,更好的去理解. 首先,我们设定一个width为100px,高度为10

圆角背景实现,如实现圆角按钮;用xml文件画圆

项目中为了更好的视觉效果,然后又懒的去弄图片做背景时,往往就会通过xml布局文件来实现圆角的效果. 在drawable目录下新建一个shape类型的xml文件,设置<corners android:radius="5dp" />,然后在需要设为圆角的控件中,如按钮或LinearLayout,设置他们的background为drawable="@drawable/...".即可达到圆角的效果 // 用xml文件画圆 用竖线连接ListView的各个item

汇编画圆

汇编画圆-->效果如下图 代码如下: 1 dseg segment 2 center_x dw 150 ;原点坐标_x 3 center_y dw 90 ;原点坐标_y 4 radius dw 50 ;半径_r 5 label_x dw ? ;外接正方形右边界 6 label_y dw ? ;外接正方形下边界 7 distance dw ? 8 dseg ends 9 cseg segment 10 assume cs:cseg , ds:dseg 11 start: 12 mov ax , d

中点画线法画圆

中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法.画一个圆心为坐标原点的1/4圆,然后对其进行简单几何变换,平移对称,就可以得到任意圆. 类似的用中点画线法,从(0,r)点开始,每次要么向右走,要么向右下走,直到x==y,即到达四分之一圆处: (1)当d<0时,中点在圆内,则取正右方的点,(x+1,y+0.5),此时d=d+2*x+3; (2) 当d>=0时,中点在圆外,则取右下方的点,(x+1,y-1),此时d=d+2*(x-y)+5; (3) d0=1-r,即点(0,r)