Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Алгоритм] ну как же сделать-то???


Автор: choodo 6.1.2008, 01:02
Код

#include <math.h>
class TTriangle:public TRF
{
    //private://-------------------private

    public://--------------------public

    void Paint(int iColor);

    //constructors & destructors
    TTriangle();
    TTriangle(int ax,int ay, int iColor, int iSize, int iAngle);
    //~Triangle();
};
//public
//-----------------------------------------------------------
void TTriangle::Paint(int iColor)
{
    setcolor(iColor);

    circle(x,y,Size/2);

    //top
    int xt = x;
    int yt = y-(Size/2);
    //moveto(xt,yt);

    //1st
    int x1 = xt+(Size/2)*cos(Angle);
    int y1 = yt +(Size/2)*sin(Angle);

    moveto(x1,y1);

    //right
    int x2 = x1+(Size/2)*cos(120+Angle);
    int y2 = y1+(Size/2)*sin(120+Angle)+(Size/2);

    lineto(x2,y2);

    //left
    int x3 = x1-(Size/2)*cos(120+Angle);
    int y3 = y1+(Size/2)*sin(120+Angle)+(Size/2);

    lineto(x3,y3);

    //
    lineto(x1,y1);//3d line

}


собсно сабж. не догоняю как повернуть треугольник. помогите, пожалуйста

в основной прогрмамме в конструктор передаем координаты, размер и случайный угол, а потом еще вращть надо его, вращение на заданный угол не могу написать(
тока, плиз, не отсылайте никуда, там я был(codenet и тд.)

Автор: cardinal 6.1.2008, 02:04
choodo, ну про матрицы поворота почитай чтоли тогда...

Автор: choodo 6.1.2008, 17:32
Код


void TTriangle::Paint(int iColor)
{
    setcolor(iColor);
    circle(x,y,size);

    float k=180/pi;

    int x0=size;
    int y0=0;
    //putpixel(x+x0,y+y0,8);

    int x1=(int)x0*cos(-90/k)+y0*(-sin(-90/k));
    int y1=(int)x0*sin(-90/k)+y0*cos(-90/k);

    //moveto(x1+x,y1+y);

    putpixel(x+x1,y+y1,iColor);

    int x2=(int)x0*cos(330/k)+y0*(-sin(330/k));
    int y2=(int)x0*sin(330/k)+y0*cos(330/k);
    //lineto(x2+x,y2+y);

    putpixel(x+x2,x+y2,iColor);

    int x3=(int)x0*cos(210/k)+y0*(-sin(210/k));
    int y3=(int)x0*sin(210/k)+y0*cos(210/k);

    putpixel(x+x3,x+y3,iColor);
    //lineto(x3+x,y3+y);




блиииин, ребят, ну че тут не так? 


верхнюю точку вывожу правильно, а 2 нижние гораздо ниже(

Автор: cardinal 6.1.2008, 17:54
А углы почему разные, если ты треугольник на один определенный угол повернуть хочешь?

Автор: choodo 6.1.2008, 18:02
я вообще хочу нарисовать его сначала: 90, 210,330 градусов - вершины

сперва хоть точки расставить, а потом буду линии чертить. вот 2 нижние вершины у меня уходят ниже описанной окружности

Автор: cardinal 6.1.2008, 18:45
В этих строках ошибка:
Код

putpixel(x+x2,x+y2,iColor);

Код

putpixel(x+x3,x+y3,iColor);

К чему ты y2 и y3 прибавляешь?

Автор: choodo 6.1.2008, 20:04
нда... точно!
жаль не могу поднять рейтинг: не хватает постов.
спасибо

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