Форум программистов, компьютерный форум CyberForum.ru

Рекурсивная функция рисования кривой - C++

Восстановить пароль Регистрация
 
Yark0s
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 37
01.03.2014, 16:56     Рекурсивная функция рисования кривой #1
Помогите перевести код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Paint(x1,y1,x2,y2,k:Longint);
  private
    { Private declarations }
  public
   n: integer
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// рекурсивная функция рисования кривой
procedure TForm1.Paint(x1,y1,x2,y2,k:Longint);
  var tx,ty:Longint;
  begin
  if n=1 then
  begin
  PaintBox1.Canvas.Pen.Color:=clRed;
  end else begin
  PaintBox1.Canvas.Pen.Color:=clRed;
  end;
   if k=0 then
    begin
     PaintBox1.Canvas.MoveTo(x1,y1);
     PaintBox1.Canvas.LineTo(x2,y2);
     Exit;
    end;
//  формулы вычисления точки,находящийся на середине отрезка и удаленной от прямой на такое расстояние
//чтобы при соединении точки с концами отрезка с данной точкой
   tx := (x1+x2) div 2 + (y2-y1) div 2;                               // ЧТО ТАКОЕ DIV??? Как его использовать на с++ ?  
   ty := (y1+y2) div 2 - (x2-x1) div 2;
// рекурсивный вызов функции,соединяющих концы отрезка с данной точкой
   Paint(x2,y2,tx,ty,k-1);                                                 // На с++ это как то не так передаётся!
   Paint(x1,y1,tx,ty,k-1);
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var x1,y1,x2,y2,k: Integer;
begin
 PaintBox1.Width := 1000;
 PaintBox1.Height:= 650;
 PaintBox1.Canvas.Brush.Color := clWhite;
 PaintBox1.Canvas.Rectangle(0,0,PaintBox1.width,PaintBox1.height);
// задаем начальные значения кривой и устанавливаем счетчик
     x1 := 200;
     y1 := 200;
     x2 := 500;
     y2 := 500;
     k  := 24;
     Paint(x1,y1,x2,y2,k);
end;
end.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 16:56     Рекурсивная функция рисования кривой
Посмотрите здесь:

C++ Рекурсивная функция
Рекурсивная функция C++
C++ Рекурсивная функция
C++ Рекурсивная функция y=3x+5
C++ Рекурсивная функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
01.03.2014, 18:01     Рекурсивная функция рисования кривой #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Unit1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
  TPaintBox *PaintBox1;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
 
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    int n;
    void paint(int, int, int, int, int);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void TForm1::paint(int x1, int y1, int x2, int y2, int k){
    int tx,ty;
    if (n==1)
        PaintBox1->Canvas->Pen->Color=clRed;
    else
        PaintBox1->Canvas->Pen->Color=clRed;
    if (k==0){
        PaintBox1->Canvas->MoveTo(x1,y1);
        PaintBox1->Canvas->LineTo(x2,y2);
        return;
    }
    //  формулы вычисления точки,находящийся на середине отрезка и удаленной от прямой на такое расстояние
//чтобы при соединении точки с концами отрезка с данной точкой
    tx = (x1+x2) / 2 + (y2-y1) / 2;                               // ЧТО ТАКОЕ DIV??? Как его использовать на с++ ?
    ty = (y1+y2) / 2 - (x2-x1) / 2;
// рекурсивный вызов функции,соединяющих концы отрезка с данной точкой
   paint(x2,y2,tx,ty,k-1);                                                 // На с++ это как то не так передаётся!
   paint(x1,y1,tx,ty,k-1);
}
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int x1,y1,x2,y2,k;
    PaintBox1->Width = 1000;
    PaintBox1->Height= 650;
    PaintBox1->Canvas->Brush->Color = clWhite;
    PaintBox1->Canvas->Rectangle(0,0,PaintBox1->Width,PaintBox1->Height);
    // задаем начальные значения кривой и устанавливаем счетчик
     x1 = 200;
     y1 = 200;
     x2 = 500;
     y2 = 500;
     k  = 24;
     paint(x1,y1,x2,y2,k);
 
}
//---------------------------------------------------------------------------
Добавлено через 2 минуты
Div - это целочисленное деление. То же что и / для целых чисел в c++

Добавлено через 2 минуты
Цитата Сообщение от Yark0s Посмотреть сообщение
if n=1 then begin PaintBox1.Canvas.Pen.Color:=clRed; end else begin PaintBox1.Canvas.Pen.Color:=clRed; end;
Тут что-то странное. В любом случае присваивается clRed.
Yark0s
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 37
01.03.2014, 18:31  [ТС]     Рекурсивная функция рисования кривой #3
Запускается, но не рисует! А на делфи всё супер!
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
01.03.2014, 19:07     Рекурсивная функция рисования кривой #4
У меня рисует какие-то красные цветочки) А что вообще должно быть нарисовано?
Yark0s
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 37
01.03.2014, 19:40  [ТС]     Рекурсивная функция рисования кривой #5
Дракон хартера-хейтуэя - за гугли! Или у меня сишка тупит скинь свой рар!
Yandex
Объявления
01.03.2014, 19:40     Рекурсивная функция рисования кривой
Ответ Создать тему
Опции темы

Текущее время: 00:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru