Программа строит с помощью рекурсии: кривая фон Коши, основанная на треугольниках,направленных внутрь.
| Код | #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);} }
|
Вот сам текст. Проблема в следуещем: при рисовании любой глубины рекурсии "обрубается" небольшой кусочек в нижнем угле треугольника. С чем это может быть связано? |