Программа нахождения четвертой вершины параллелограмма.
Эта небольшая программа появилась из хорошо известной задачи: Известно, что точки с координатами (x1, y1), (x2, y2), (x3, y3) являются тремя вершинами некоторого параллелограмма. Найти координаты четвертой вершины.
С точки зрения математики возможны три случая. 1 - 3 точки являются диагональю, 2 - 3 точки являются диагональю, и 1 - 2 точки являются диагональю. Эти случаи и реализованы в программе. Находятся координаты середины диагонали. И зная эти координаты можно вычислить неизвестную вершину. Для этого достаточно знать две формулы:
XC = (X1+X2)/2 и YC=(Y1+Y2)/2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Вершины_параллелограмма
{
public partial class Form1 : Form
{
int x1, x2, x3, y1, y2, y3,a,b,xc,yc;
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
x1 = Convert.ToInt32(textBox1.Text);
y1 = Convert.ToInt32(textBox2.Text);
x2 = Convert.ToInt32(textBox3.Text);
y2 = Convert.ToInt32(textBox4.Text);
x3 = Convert.ToInt32(textBox5.Text);
y3 = Convert.ToInt32(textBox6.Text);
int k = comboBox1.SelectedIndex;
int m = 10;
if (k == 0) m = 10;
if (k == 1) m = 20;
if (k == 2) m = 50;
if (k == 3) m = 100;
// инициализируем графику
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
//очищаем поле для рисованиия
g.Clear(Color.White);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), i, 0, i, 600);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), 0, i, 600, i);
g.DrawLine(new Pen(Color.Blue, 1), 300, 0, 300, 600);
g.DrawLine(new Pen(Color.Blue, 1), 0, 300, 600, 300);
y1 = -y1;
y2 = -y2;
y3 = -y3;
xc = (x1 + x3) / 2;
yc = (y1 + y3) / 2;
a = 2 * xc - x2;
b = 2 * yc - y2;
textBox12.Text = Convert.ToString(a);
textBox11.Text = Convert.ToString(-b);
g.DrawLine(new Pen(Color.Red, 2), x1 * m + 300, y1 * m + 300, x2 * m + 300, y2 * m + 300);
g.DrawLine(new Pen(Color.Red, 2), x2 * m + 300, y2 * m + 300, x3 * m + 300, y3 * m + 300);
g.DrawLine(new Pen(Color.Red, 2), x1 * m + 300, y1 * m + 300, a * m + 300, b * m + 300);
g.DrawLine(new Pen(Color.Red, 2), x3 * m + 300, y3 * m + 300, a * m + 300, b * m + 300);
Font f = new System.Drawing.Font("Times New Roman", 12, System.Drawing.FontStyle.Bold);
// устанавливаем цвет
SolidBrush f1 = new SolidBrush(Color.Green);
// выводим надписи
g.DrawString("Случай 1", f, f1, a * m + 300, b * m + 300);
g.DrawString("1", f, f1, x1 * m + 300, y1 * m + 300);
g.DrawString("2", f, f1, x2 * m + 300, y2 * m + 300);
g.DrawString("3", f, f1, x3 * m + 300, y3 * m + 300);
}
private void button3_Click(object sender, EventArgs e)
{
x1 = Convert.ToInt32(textBox1.Text);
y1 = Convert.ToInt32(textBox2.Text);
x2 = Convert.ToInt32(textBox3.Text);
y2 = Convert.ToInt32(textBox4.Text);
x3 = Convert.ToInt32(textBox5.Text);
y3 = Convert.ToInt32(textBox6.Text);
int k = comboBox1.SelectedIndex;
int m = 10;
if (k == 0) m = 10;
if (k == 1) m = 20;
if (k == 2) m = 50;
if (k == 3) m = 100;
// инициализируем графику
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
//очищаем поле для рисованиия
g.Clear(Color.White);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), i, 0, i, 600);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), 0, i, 600, i);
g.DrawLine(new Pen(Color.Blue, 1), 300, 0, 300, 600);
g.DrawLine(new Pen(Color.Blue, 1), 0, 300, 600, 300);
y1 = -y1;
y2 = -y2;
y3 = -y3;
xc = (x2 + x3) / 2;
yc = (y2 + y3) / 2;
a = 2 * xc - x1;
b = 2 * yc - y1;
textBox10.Text = Convert.ToString(a);
textBox9.Text = Convert.ToString(-b);
g.DrawLine(new Pen(Color.Blue, 2), x1 * m + 300, y1 * m + 300, x2 * m + 300, y2 * m + 300);
g.DrawLine(new Pen(Color.Blue, 2), x2 * m + 300, y2 * m + 300, a * m + 300, b * m + 300);
g.DrawLine(new Pen(Color.Blue, 2), x3 * m + 300, y3 * m + 300, a * m + 300, b * m + 300);
g.DrawLine(new Pen(Color.Blue, 2), x1 * m + 300, y1 * m + 300, x3 * m + 300, y3 * m + 300);
Font f = new System.Drawing.Font("Times New Roman", 12, System.Drawing.FontStyle.Bold);
// устанавливаем цвет
SolidBrush f1 = new SolidBrush(Color.Green);
// выводим надписи
g.DrawString("Случай 2", f, f1, a * m + 300, b * m + 300);
g.DrawString("1", f, f1, x1 * m + 300, y1 * m + 300);
g.DrawString("2", f, f1, x2 * m + 300, y2 * m + 300);
g.DrawString("3", f, f1, x3 * m + 300, y3 * m + 300);
}
private void button4_Click(object sender, EventArgs e)
{
x1 = Convert.ToInt32(textBox1.Text);
y1 = Convert.ToInt32(textBox2.Text);
x2 = Convert.ToInt32(textBox3.Text);
y2 = Convert.ToInt32(textBox4.Text);
x3 = Convert.ToInt32(textBox5.Text);
y3 = Convert.ToInt32(textBox6.Text);
int k = comboBox1.SelectedIndex;
int m = 10;
if (k == 0) m = 10;
if (k == 1) m = 20;
if (k == 2) m = 50;
if (k == 3) m = 100;
// инициализируем графику
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
//очищаем поле для рисованиия
g.Clear(Color.White);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), i, 0, i, 600);
for (int i = 0; i < 600; i = i + m) g.DrawLine(new Pen(Color.DarkSeaGreen, 1), 0, i, 600, i);
g.DrawLine(new Pen(Color.Blue, 1), 300, 0, 300, 600);
g.DrawLine(new Pen(Color.Blue, 1), 0, 300, 600, 300);
y1 = -y1;
y2 = -y2;
y3 = -y3;
xc = (x1 + x2) / 2;
yc = (y1 + y2) / 2;
a = 2 * xc - x3;
b = 2 * yc - y3;
textBox7.Text = Convert.ToString(a);
textBox8.Text = Convert.ToString(-b);
g.DrawLine(new Pen(Color.Green, 2), x1 * m + 300, y1 * m + 300, x3 * m + 300, y3 * m + 300);
g.DrawLine(new Pen(Color.Green, 2), x1 * m + 300, y1 * m + 300, a * m + 300, b * m + 300);
g.DrawLine(new Pen(Color.Green, 2), x2 * m + 300, y2 * m + 300, a * m + 300, b * m + 300);
g.DrawLine(new Pen(Color.Green, 2), x2 * m + 300, y2 * m + 300, x3 * m + 300, y3 * m + 300);
Font f = new System.Drawing.Font("Times New Roman", 12, System.Drawing.FontStyle.Bold);
// устанавливаем цвет
SolidBrush f1 = new SolidBrush(Color.Blue);
// выводим надписи
g.DrawString("Случай 3", f, f1, a * m + 300, b * m + 300);
g.DrawString("1", f, f1, x1 * m + 300, y1 * m + 280);
g.DrawString("2", f, f1, x2 * m + 300, y2 * m + 300);
g.DrawString("3", f, f1, x3 * m + 300, y3 * m + 300);
}
}
}
|