So anyone knows how to find vectors for these blue lines?
So anyone knows how to find vectors for these blue lines?
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.
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