Triangle vectors on the circle

Started by
3 comments, last by _WeirdCat_ 9 years, 8 months ago

circle.jpg

So anyone knows how to find vectors for these blue lines?

Advertisement

Your link is faulty.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.

You don't forget how to play when you grow old; you grow old when you forget how to play.

circle.jpg

Take the average direction of the two red lines and rotate it 15 degrees to each side to get the directions of the blue lines. [EDIT: Perhaps I didn't understand what you mean by "are angled at 30 degrees". Please tell draw the angles you are talking about.]

circle2.jpg

ofc every blue line is angled at 30 degrees. geez i forgot to draw a bottom line of that triangle (that with blue lines since its a cut triangle) so it looks that angles are from circle itself to segment.

I could build up a matrix where red line unit vec is front z+ is up vector and crossproduct of these two is right vec then i could just yaw it. But i am looking for easier solution

just was looking at this and you are right alvaro making average of these two red lines and making a full trianglei can rotate this avg red line by 30 degs, thanks

OK I will gladly post a solution


 

 Graphics::TBitmap * bmp =      new               Graphics::TBitmap;

bmp->PixelFormat = pf24bit;

bmp->Width  = 1000;

bmp->Height = 1000;

 

int bmpcx = bmp->Width / 2;

int bmpcy = bmp->Height / 2;

 

long double angle = 0.0;

long double scale = 60.0;

                           //cm

long double CircleRadius = 6.0*scale;// 6 * 60 = 360 pixels of radius / diameter 720 pixels

 

long double x;

long double y;

 

long double numofteeth = 16;

 

long double circumreference = 2.0 * pild * CircleRadius;

 

long double teethwidth = circumreference / numofteeth;

long double teethheight = 1.0 * scale; //1 cm height

 

int i;

for (angle=0; angle <360; angle= angle + 0.1)

{

x = CircleRadius*cosl(angle*imopild);

y = CircleRadius*sinl(angle*imopild);

 

    bmp->Canvas->Pixels[bmpcx+int(x)][bmpcy+int(y)] = clBlack;

}

 

  int reach = int(numofteeth);

long double tmp = 0;

long double angler1 = 0;

long double angler2 = 0;

long double vecx;

long double vecy;

 

long double avecx;

long double avecy;

 

long double bvecx;

long double bvecy;

 

 

TPoint A,B,C;

 

t3dpoint vec; vec.z = 0.0;

t3dpoint vecb; vecb.z = 0.0;

for (i=0; i < reach; i++)

{

angler1 = 360.0 * ( tmp / circumreference );

angler2 = 360.0 * ( (tmp+teethwidth) / circumreference );

tmp = tmp + teethwidth;

angle = (angler1 + angler2) / 2.0;

 

//lets say add 30 degs to it so triangle will have 60 30 30

 

        vecx = CircleRadius * cosl((angle)*imopild);

        vecy = CircleRadius * sinl((angle)*imopild);

 

 

        vec.x = float(vecx);

        vec.y = float(vecy);

        vec.z = 0.0f;

        vec = Normalize(vec);

 

        vecx = vecx + ( (long double)vec.x * (teethwidth / 2.0) );

        vecy = vecy + ( (long double)vec.y * (teethwidth / 2.0) );

 

        

        avecx = CircleRadius * cosl((angler1)*imopild);

        avecy = CircleRadius * sinl((angler1)*imopild);

 

        bvecx = CircleRadius * cosl((angler2)*imopild);

        bvecy = CircleRadius * sinl((angler2)*imopild);

 

C.x = int(vecx);

C.y = int(vecy);

 

A.x = int(avecx);

A.y = int(avecy);

 

B.x = int(bvecx);

B.y = int(bvecy);

bmp->Canvas->Brush->Style = bsSolid;

bmp->Canvas->Brush->Color = clBlack;

bmp->Canvas->MoveTo(bmpcx+C.x,bmpcy+C.y);

bmp->Canvas->LineTo(bmpcx+A.x,bmpcy+A.y);

 

bmp->Canvas->MoveTo(bmpcx+C.x,bmpcy+C.y);

bmp->Canvas->LineTo(bmpcx+B.x,bmpcy+B.y);

}

bmp->SaveToFile("E:\\FFS_WTF.bmp");

result

FFS_WTF.jpg

This topic is closed to new replies.

Advertisement