Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > рекурсия


Автор: krot100500 27.5.2012, 14:50
Программа строит с помощью рекурсии: кривая фон Коши, основанная на треугольниках,направленных внутрь.
Код

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int nmodel=0;
float xx[30],yy[30];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void side(float xA,float yA,float xB,float yB,int n)
{int i;
 float x,y,x1,y1,dx=xB-xA,dy=yB-yA;
 if(n==0)
 {Form1->Canvas->MoveTo(xA,yA);
  Form1->Canvas->LineTo(xB,yB);
 }
 else
 {
 x1=xA;y1=yA;
  for(i=1;i<=nmodel;i++)
  {x=x1;y=y1;
  x1=xA+dx*xx[i]-dy*yy[i];
  y1=yA+dy*xx[i]+dx*yy[i];
  side(x,y,x1,y1,n-1);
  }}}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int Xmax,Ymax;
 Xmax = StrToInt(Form1->ClientWidth);
 Ymax = StrToInt(Form1->ClientHeight);
 TColor pc,bc;
 Form1->Canvas->Pen->Color = clWhite;
 Form1->Canvas->Brush->Color = clWhite;
 Form1->Canvas->Rectangle(0,0,Xmax,Ymax);
 Canvas->Pen->Color = pc;
 Canvas->Brush->Color = bc;

 int n,k,i;
 float pi,theta,r,xA,yA,xB,yB,xC,yC,sizefactor,xmargin,phi;
 k=3;
 n= StrToFloat(Edit2->Text);
 nmodel=3;
 nmodel++;
 xx[1]=0.334;xx[2]=0.5;xx[3]=0.666;
 yy[1]=0;yy[2]=0.3;yy[3]=0;
 sizefactor=0.8;
 xx[nmodel]=1;

 xC=Xmax/2;
 yC=Ymax/2;
 r=yC*sizefactor;
 pi=4*3.14;
 theta=2*pi/k;
 phi=-0.5*theta;
 xB=xC+r*cos(phi);
 yB=yC+r*sin(phi);

 for(i=0;i<k;i++)
  {xA=xB;yA=yB;
   phi+=theta;
   xB=xC+r*cos(phi);
   yB=yC+r*sin(phi);
   side(xA,yA,xB,yB,n);}
}

Вот сам текст.
Проблема в следуещем: при рисовании любой глубины рекурсии "обрубается" небольшой кусочек в нижнем угле треугольника. С чем это может быть связано?

Автор: Dem_max 28.5.2012, 03:25
наверное с количеством проходов, если их у тебя например 10 то должно быть 11

Автор: krot100500 30.5.2012, 01:24
проверил, с проходами вроде норм все, я думаю что нето что-то в массиве координат, хотя там вроде тоже норм, последнее на что могу подумать так это само рисование

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)