C# 沿角度方向移动椭圆

C# 沿角度方向移动椭圆,c#,winforms,move,drawrectangle,drawellipse,C#,Winforms,Move,Drawrectangle,Drawellipse,嘿,我对C#Graphics Programming是个新手。我需要知道如何在窗口窗体内沿角度方向移动椭圆。我已经成功地用我的代码在默认方向上移动了椭圆 我的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Lin

嘿,我对C#Graphics Programming是个新手。我需要知道如何在窗口窗体内沿角度方向移动椭圆。我已经成功地用我的代码在默认方向上移动了椭圆


我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Paddle_Test
{
    public partial class Form1 : Form
    {
        Rectangle rec;
        int wLoc=0;
        int hLoc=0;
        int dx=3;
        int dy=3;

    public Form1()
    {
     InitializeComponent();
     rec = new Rectangle(wLoc,hLoc , 100, 10);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Refresh();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.SmoothingMode = SmoothingMode.AntiAlias;
        g.FillEllipse(new SolidBrush(Color.Blue), rec);

    }

    private void timer_Tick(object sender, EventArgs e)
    {
        //moving inside my timer
        rec.X += dx;  
        rec.Y += dy;  
    }


}
  }

简单地说,我的椭圆只沿对角线移动!用简单的话来说,问题是,我能不能像30'或80'那样移动它,或以指定的角度移动它



矩形。X/Y是
int
,加上这样的整数至少会使X或Y加+1,从而导致对角线移动

dx和dy应为
浮点
双精度
。对于X坐标和Y坐标,也必须有一个浮点变量,并使用它进行计算。计算后,您可以将自己的X/Y指定给矩形

从您的代码中,您应该编写更多内容:

public partial class Form1 : Form
{
    Rectangle rec;
    int wLoc=0;
    int hLoc=0;
    double xpos=0;
    double ypos=0;
    double dx=0.3;
    double dy=0.6;
然后在计时器中计算如下:

xpos += dx;
ypos += dy;
rec.X = xpos;
rec.Y = ypos;
在墙上的反射可以在计时器中通过对dx或dy求反来完成,具体取决于你到达的一侧

如果要使用角度作为输入来计算dx和dy,可以通过以下方式进行:

xpos += cos(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
ypos += -sin(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
rec.X = xpos;
rec.Y = ypos;

速度是以每次调用的像素为单位的移动。

矩形。X/Y是
int
,将这样的整数相加,至少会使X或Y加+1,从而导致对角线移动

dx和dy应为
浮点
双精度
。对于X坐标和Y坐标,也必须有一个浮点变量,并使用它进行计算。计算后,您可以将自己的X/Y指定给矩形

从您的代码中,您应该编写更多内容:

public partial class Form1 : Form
{
    Rectangle rec;
    int wLoc=0;
    int hLoc=0;
    double xpos=0;
    double ypos=0;
    double dx=0.3;
    double dy=0.6;
然后在计时器中计算如下:

xpos += dx;
ypos += dy;
rec.X = xpos;
rec.Y = ypos;
在墙上的反射可以在计时器中通过对dx或dy求反来完成,具体取决于你到达的一侧

如果要使用角度作为输入来计算dx和dy,可以通过以下方式进行:

xpos += cos(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
ypos += -sin(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
rec.X = xpos;
rec.Y = ypos;

速度是以每次调用的像素为单位的移动。

矩形。X/Y是
int
,将这样的整数相加,至少会使X或Y加+1,从而导致对角线移动

dx和dy应为
浮点
双精度
。对于X坐标和Y坐标,也必须有一个浮点变量,并使用它进行计算。计算后,您可以将自己的X/Y指定给矩形

从您的代码中,您应该编写更多内容:

public partial class Form1 : Form
{
    Rectangle rec;
    int wLoc=0;
    int hLoc=0;
    double xpos=0;
    double ypos=0;
    double dx=0.3;
    double dy=0.6;
然后在计时器中计算如下:

xpos += dx;
ypos += dy;
rec.X = xpos;
rec.Y = ypos;
在墙上的反射可以在计时器中通过对dx或dy求反来完成,具体取决于你到达的一侧

如果要使用角度作为输入来计算dx和dy,可以通过以下方式进行:

xpos += cos(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
ypos += -sin(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
rec.X = xpos;
rec.Y = ypos;

速度是以每次调用的像素为单位的移动。

矩形。X/Y是
int
,将这样的整数相加,至少会使X或Y加+1,从而导致对角线移动

dx和dy应为
浮点
双精度
。对于X坐标和Y坐标,也必须有一个浮点变量,并使用它进行计算。计算后,您可以将自己的X/Y指定给矩形

从您的代码中,您应该编写更多内容:

public partial class Form1 : Form
{
    Rectangle rec;
    int wLoc=0;
    int hLoc=0;
    double xpos=0;
    double ypos=0;
    double dx=0.3;
    double dy=0.6;
然后在计时器中计算如下:

xpos += dx;
ypos += dy;
rec.X = xpos;
rec.Y = ypos;
在墙上的反射可以在计时器中通过对dx或dy求反来完成,具体取决于你到达的一侧

如果要使用角度作为输入来计算dx和dy,可以通过以下方式进行:

xpos += cos(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
ypos += -sin(angleInDegrees / 360.0 * 2 * Math.PI) * speed;
rec.X = xpos;
rec.Y = ypos;

速度是以每次调用的像素为单位的移动。

我相信您正在寻找一些基本的三角函数,例如:

x = cos(degrees) * maxX;
y = sin(degrees) * maxY;

我相信你在寻找一些基本的三角函数,比如:

x = cos(degrees) * maxX;
y = sin(degrees) * maxY;

我相信你在寻找一些基本的三角函数,比如:

x = cos(degrees) * maxX;
y = sin(degrees) * maxY;

我相信你在寻找一些基本的三角函数,比如:

x = cos(degrees) * maxX;
y = sin(degrees) * maxY;

我编辑了我的代码,如果我更改了dx=5和dy=2,它会加快移动速度,这意味着这就是点,你应该将dx和dy设置为较小的值。将其设置为0.3或0.6。您不应使用整数进行计算。@user3411946请看我的示例。您的代码为我提供了一些想法,因此我正在处理您的帮助将为+1等待我的标记。我编辑了我的代码,如果我更改了dx=5和dy=2,它将加快移动速度。这意味着这就是关键点,您应该将dx和dy设置为较小的值。将其设置为0.3或0.6。您不应使用整数进行计算。@user3411946请看我的示例。您的代码为我提供了一些想法,因此我正在处理您的帮助将为+1等待我的标记。我编辑了我的代码,如果我更改了dx=5和dy=2,它将加快移动速度。这意味着这就是关键点,您应该将dx和dy设置为较小的值。将其设置为0.3或0.6。您不应使用整数进行计算。@user3411946请看我的示例。您的代码为我提供了一些想法,因此我正在处理您的帮助将为+1等待我的标记。我编辑了我的代码,如果我更改了dx=5和dy=2,它将加快移动速度。这意味着这就是关键点,您应该将dx和dy设置为较小的值。将其设置为0.3或0.6。您不应该在计算中使用整数。@user3411946请看我的示例。您的代码给了我一些想法,因此我正在处理您的帮助将给+1等待我的分数