C# 沿角度方向移动椭圆
嘿,我对C#Graphics Programming是个新手。我需要知道如何在窗口窗体内沿角度方向移动椭圆。我已经成功地用我的代码在默认方向上移动了椭圆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
我的代码:
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等待我的分数