Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Triangle vectors on the circle


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 WiredCat   Members   -  Reputation: 355

Like
0Likes
Like

Posted 08 August 2014 - 08:05 AM

circle.jpg

 

 

 

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


Edited by WiredCat, 08 August 2014 - 10:06 AM.


Sponsor:

#2 Buckeye   Crossbones+   -  Reputation: 5650

Like
0Likes
Like

Posted 08 August 2014 - 08:41 AM

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.


#3 Álvaro   Crossbones+   -  Reputation: 13657

Like
0Likes
Like

Posted 08 August 2014 - 08:58 AM

circle.jpg



#4 Álvaro   Crossbones+   -  Reputation: 13657

Like
1Likes
Like

Posted 08 August 2014 - 08:59 AM

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.]

Edited by Álvaro, 08 August 2014 - 09:01 AM.


#5 WiredCat   Members   -  Reputation: 355

Like
1Likes
Like

Posted 08 August 2014 - 10:11 AM

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


Edited by WiredCat, 08 August 2014 - 11:11 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS