Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2022, 22:32   #1
Korol12
Пользователь
 
Регистрация: 07.05.2020
Сообщений: 16
По умолчанию Как нарисовать трапецию??

Здравствуйте, вот есть класс трапеция который имеет верхнюю сторону трапеции (а), нижнюю сторону трапеции (b) и высоту (h).
Есть также метод Draw, он должен нарисовать эту трапецию з теми параметрами который введет пользователь, но что то у меня не получается его нарисовать. Нужно нарисовать там где будет клик указателя мыши, но я и так пробовал, и уже по статистическим координатам, не выходит. Помогите пожалуйста доделать этот кусочек код.
Вот код:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
 
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        Trapeze trapeze;
 
        public class Trapeze
        {
            double a;
            double b;
            double h;
            public double A
            {
                set { a = value; }
                get { return a; }
            }
            public double B
            {
                set { b = value; }
                get { return b; }
            }
            public double H
            {
                set { h = value; }
                get { return h; }
            }
            public Trapeze()
            {
                a = 0;
                b = 0;
                h = 0;
            }
            public Trapeze(double a, double b, double h)
            {
                this.a = a;
                this.b = b;
                this.h = h;
            }
 
            public void Draw(Pen p, Graphics g, int x, int y)
            {
                int a = (int)A;
                int b = (int)B;
                int h = (int)H;
 
                g.DrawLine(p, 110, 130, 110 + a, 130);
                g.DrawLine(p, 110, 130 + h, 110 + b, 130 + h);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
            {
                trapeze = new Trapeze();
                MessageBox.Show("Заполните пустые поля!");
            }
            else
            {
                double a = Convert.ToDouble(textBox1.Text);
                double b = Convert.ToDouble(textBox2.Text);
                double h = Convert.ToDouble(textBox3.Text);
                trapeze = new Trapeze(a, b, h);
            }
        }
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (trapeze == null)
            {
                MessageBox.Show("Ви не создали объект класса!");
            }
            else
            {
                Graphics g = CreateGraphics();
                Pen p = new Pen(Color.Red);
                g.Clear(BackColor);
                trapeze.Draw(p, g, e.X, e.Y);
            }
        }
    }
}
Так же прикрепляю архив из формой. Буду очень благодарен за помощь.
Вложения
Тип файла: rar WindowsFormsApp1.rar (15.8 Кб, 1 просмотров)
Korol12 вне форума Ответить с цитированием
Старый 20.04.2022, 23:28   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Равнобедренная:
Код:
int d1 = ( b - a >= 0 ) ? ( b - a ) / 2 : 0;
int d2 = ( a - b >= 0 ) ? ( a - b ) / 2 : 0;
g.DrawLine(p, X+d1, Y, X+a+d1, Y);
g.DrawLine(p, X+d1, Y, X+d2, Y+h);
g.DrawLine(p, X+d2, Y+h, X+b+d2, Y+h);
g.DrawLine(p, X+b+d2, Y+h, X+a+d1, Y);

Последний раз редактировалось macomics; 20.04.2022 в 23:50.
macomics вне форума Ответить с цитированием
Старый 20.04.2022, 23:29   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Наверное, рисовать надо по координатам вершин, и в векторной форме. Создать класс точка. И класс вектор. Трапеция задается четыремя точками(вершинами). Стороны отрисовываются как векторы.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 20.04.2022, 23:37   #4
Korol12
Пользователь
 
Регистрация: 07.05.2020
Сообщений: 16
По умолчанию

macomics,
Работает, спасибо большое!
Korol12 вне форума Ответить с цитированием
Старый 27.05.2022, 06:45   #5
Tom_Bergersen
Новичок
Джуниор
 
Регистрация: 26.05.2022
Сообщений: 9
По умолчанию

bool paint;
Point pStart, pEnd;
Bitmap bm;
double h, raznica, nl, vp, a, angle;
public double GoodDgrs(double angle)
{
int koef = (int)angle / 360;
angle = (angle - 360 * koef) * Math.PI / 180;
return angle;
}
angle = Convert.ToDouble(textBox1.Text);
h = Math.Abs(pEnd.Y - pStart.Y); // находим высоту
a = h / Math.Sin(GoodDgrs(angle)); // находим боковые стороны трапеции
raznica = Math.Sqrt(a * a - h * h); // = (большее основание-меньшее основание) / 2

if (GoodDgrs(angle) <= 90 * Math.PI / 180)
{
nl = pStart.X - raznica; // координата по Х Нижней Левой вершины трапеции
vp = pEnd.X - raznica; // координата по Х Верхней Правой вершины трапеции

Point point1 = new Point((int)vp, pStart.Y); // координата Нижней Левой вершины трапеции
Point point2 = new Point((int)nl, pEnd.Y); // координата Верхней Правой вершины трапеции
if (point1.X > pStart.X && point2.X < pEnd.X && pStart.Y < pEnd.Y)
{
Point[] points = new Point[4] { pStart, point2, pEnd, point1 };
g.DrawPolygon(pen1, points);
}
}
else if (GoodDgrs(angle) > 90 * Math.PI / 180 && GoodDgrs(angle) < 180 * Math.PI / 180)
{
nl = pStart.X + raznica; // координата по Х Нижней Левой вершины трапеции
vp = pEnd.X + raznica; // координата по Х Верхней Правой вершины трапеции

Point point1 = new Point((int)vp, pStart.Y); // координата Нижней Левой вершины трапеции
Point point2 = new Point((int)nl, pEnd.Y); // координата Верхней Правой вершины трапеции
if (point1.X > pStart.X && point2.X < pEnd.X && pStart.Y < pEnd.Y)
{
Point[] points = new Point[4] { pStart, point2, pEnd, point1 };
g.DrawPolygon(pen1, points);
}
}
else
MessageBox.Show("Угол не может быть в пределах [Pi; 2Pi]");
}
Tom_Bergersen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здравствуйте, помогите сделать программку, определить класс, описывающий равнобочную трапецию. ПаскальABC.Net Новичокк Паскаль, Turbo Pascal, PascalABC.NET 1 31.03.2018 14:53
Как нарисовать куб? audetore Общие вопросы Delphi 2 27.01.2014 06:03
построить равнобедренную трапецию в делфи Евгений77777 Помощь студентам 2 18.03.2012 23:01
Нарисовать в с++ Telec Общие вопросы C/C++ 0 30.05.2010 22:14
Проверка на трапецию kJlaCuk Помощь студентам 2 29.12.2008 21:06