
30.10.2008, 20:19
|
|
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме: 127017
Репутация:
61
|
|
Сообщение от 043nKRuT0y
Кто знает как решить :
Круг радиусом R движется из центра екрана по СПИРАЛИ к границам екрана !
Реализовать нужно на С# с элементами графики !
Кто может - помогите ! С меня + !
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CircleMoving
{
public partial class Form1 : Form
{
const int m_Radius = 100;
const int m_Addition = 4;
const int m_SmallCircleRadius = m_Radius / 2;
int m_StartPositionX;
int m_StartPositionY;
int m_SpiralX;
int m_SpiralY;
bool m_Sign = true;
List<Point> m_LastPoints;
public Form1()
{
InitializeComponent();
m_StartPositionX = this.Width / 2 - m_Radius / 2;
m_StartPositionY = this.Height / 2 - m_Radius / 2;
m_SpiralX = 0;
m_SpiralY = 0;
m_LastPoints = new List<Point>();
}
private void timer1_Tick(object sender, EventArgs e)
{
m_StartPositionX++;
m_StartPositionY++;
if (m_Sign)
m_SpiralX += m_Addition;
else
m_SpiralX -= m_Addition;
m_SpiralY = (int)Math.Sqrt(
Math.Pow(m_SmallCircleRadius, 2) - Math.Pow(m_SpiralX, 2)
);
this.Invalidate();
if (m_SpiralX + m_Addition >= m_SmallCircleRadius)
m_Sign = false;
if (m_SpiralX - m_Addition <= 0)
m_Sign = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Point m_LastPoint = Point.Empty;
foreach (Point m_Point in m_LastPoints)
{
if(m_LastPoint == Point.Empty)
g.DrawEllipse(new Pen(Color.DarkSlateBlue), m_Point.X, m_Point.Y, 1, 1);
else
g.DrawLine(new Pen(Color.DarkSlateBlue), m_LastPoint, m_Point);
m_LastPoint = m_Point;
}
g.DrawEllipse(
new Pen(Color.DarkRed),
new Rectangle(
m_StartPositionX + m_SpiralX - m_SmallCircleRadius,
m_StartPositionY + m_SpiralY - m_SmallCircleRadius,
m_Radius,
m_Radius
)
);
m_LastPoints.Add(new Point(
m_StartPositionX + m_SpiralX - m_SmallCircleRadius + m_Radius / 2,
m_StartPositionY + m_SpiralY - m_SmallCircleRadius + m_Radius / 2
));
if ((m_LastPoints[m_LastPoints.Count - 1].X + m_Radius / 2 == this.Width)
||
(m_LastPoints[m_LastPoints.Count - 1].Y + m_Radius / 2 == this.Height))
{
timer1.Stop();
timer1.Enabled = false;
timer1.Dispose();
MessageBox.Show("Перемещение круга завершено");
}
}
}
}
|
|
|