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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 18:15   #1
Lers
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 33
По умолчанию графика

Код:
#include <stdio.h>
#include <math.h>
 double gx;
double gy;
double gr;

double det( double a1, double b1, double c1, double a2, double b2, double c2 )
{
    return (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2 - (a1*a1+a2*a2)*c2 - (b1*b1+b2*b2)*a2 - (c1*c1+c2*c2)*b2;
}
 
double norm(double x1, double y1, double x2, double y2)
{
    return sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2));
}
 
// вычисление описанной окружности
void circumscribed( double x1, double y1, double x2, double y2, double x3, double y3 )
{
    double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    gr = norm(x1, y1, x2, y2)*norm(x1, y1, x3, y3)*norm(x3, y3, x2, y2)*fabs(Dinv);
    gx =  Dinv*det(x1, x2, x3, y1, y2, y3);
    gy = -Dinv*det(y1, y2, y3, x1, x2, x3);
}
 
int main()
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
    printf("Input x1 y1 x2 y2 x3 y3: ");
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
 
    circumscribed(x1, y1, x2, y2, x3, y3);
    printf("Center: (%g, %g)\n", gx, gy);
    printf("Radius: %g\n", gr);
 
    return 0;
}
Даны два множества точек на плоскости. Найти центр и радиус окружности, проходящей через к (к> 3) точек первого множества и содержащей внутри себя m точек второго множества.
P.S. собственно я написал решение этой задачи, хотелось бы его реализовать в билдере с ходом решения задачи, т.е. множества точек показать, круги и т.п.
Lers вне форума Ответить с цитированием
Старый 14.05.2013, 18:15   #2
Lers
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 33
По умолчанию

Нашел программу которая внешне подходит мне, нужно только мой код исправить под билдер. Заранее спасибо.
Вот пример другой задачи:
(Построить множество всех различных остроугольных треугольников с вершинами в заданном множестве точек на плоскости.Сделать два варианта ввода исходных данных: через ручной ввод в соответствующую компоненту, использование генерации значений случайным образом.)
Цитата:
#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x[100],y[100],n;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}

void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
Memo2->Visible=True;
Label1->Visible=False;
Edit1->Visible=False;
TrackBar1->Visible=False;
Memo2->Clear();
Memo2->Lines->Add("Вводите координаты:");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{ Memo2->Visible=False;
Label1->Visible=True;
Edit1->Visible=True;
TrackBar1->Visible=True;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
Edit1->Text=IntToStr(TrackBar1->Position);
}
//---------------------------------------------------------------------------
void create_triangles(){ //процедура прорисовки треугольников
int i,j,k;
float l1,l2,l3,t;
for (i=0; i<n; i++)
for (j=i+1; j<n; j++)
for (k=j+1; k<n; k++){
l1=pow(x[i]-x[j],2)+pow(y[i]-y[j],2);
l2=pow(x[i]-x[k],2)+pow(y[i]-y[k],2);
l3=pow(x[j]-x[k],2)+pow(y[j]-y[k],2);
if (l3>l2) {t=l2; l2=l3; l3=t;}
if (l2>l1) {t=l1; l1=l2; l2=t;}
if (l1<l2+l3){
Form1->PaintBox1->Canvas->MoveTo(x[i],y[i]);
Form1->PaintBox1->Canvas->LineTo(x[j],y[j]);

Form1->PaintBox1->Canvas->MoveTo(x[j],y[j]);
Form1->PaintBox1->Canvas->LineTo(x[k],y[k]);

Form1->PaintBox1->Canvas->MoveTo(x[k],y[k]);
Form1->PaintBox1->Canvas->LineTo(x[i],y[i]);
}
}
}

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int t,i;
PaintBox1->Canvas->Rectangle(0,0,593,417);
if (RadioButton2->Checked){
n=StrToInt(Edit1->Text);
for (i=0; i<n; i++){ //создание точек рандомом
x[i]=rand()%590+1;
y[i]=rand()%415+1;
PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2);
}
create_triangles()
}
if (RadioButton1->Checked){
n=Memo2->Lines->Count-1;
AnsiString a,b;
for (i=0; i<n; i++){ //чтение введённых точек
a=Memo2->Lines->Strings[i+1];
t=a.Pos(" ");
b=a.SubString(1,t-1);
a=a.Delete(1,t);
x[i]=StrToInt(b);
y[i]=StrToInt(a);
PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2);
}
create_triangles();
}
}
//---------------------------------------------------------------------------



P.S. помогите кто-нибудь впихнуть мой отредактированный код под билдер в эту программу. Заранее спасибо.
Lers вне форума Ответить с цитированием
Старый 15.05.2013, 18:49   #3
Lers
Пользователь
 
Регистрация: 12.12.2012
Сообщений: 33
По умолчанию

Никто не поможет?
Lers вне форума Ответить с цитированием
Старый 15.05.2013, 21:05   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Lers
Понимаешь, у меня есть чертёж самолёта, а надо сделать паровоз. Я даже знаю, какого он должен быть цвета. Не поможешь?
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика Кристина133 Компоненты Delphi 3 02.04.2011 10:42
Графика plm Общие вопросы по программированию, компьютерный форум 0 18.01.2011 19:07
Графика в с++ lord Mu$t@ng Помощь студентам 0 29.04.2010 11:50
Графика с++ dampirik Общие вопросы C/C++ 4 19.10.2009 01:57
Графика StudentPolitech Помощь студентам 1 26.12.2008 19:13