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