沿角度方向移动椭圆

时间:2014-04-02 14:32:47

标签: c# winforms move drawrectangle drawellipse

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


我的代码:

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'或角度指定!


enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Rectangle.X / Y是int,添加到这样的整数至少会向X或Y添加+1,从而导致对角线移动。

dx和dy应为floatdouble。对于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;

速度是每个timercall以像素为单位的移动。