Jag skulle behöva lite hjälp med ett litet verktyg, som skall användas tillsammans med ett rundbord till en fräs. Det gäller att kunna dela upp en cirkel i lika stora delar, används bl a för att kunna göra kuggar, borra fastsättningshål i en cylinder mm. Själva matten i grunden är ju inte så svår, cirklen är ju 360 grader delat med antal delningar dvs är det 3 delningar så blir det 0, 120 och 240. Edit: Uppdaterat exempel för att rita "hål" istf. "tårtbitar" Hej Tomas och tack för att du försöker hjälpa mig. Meningen är att det skall vara lite mera dynamiskt. Via en textruta skrivs det in antal delningar. 2 - vad det nu kan vara. Ett exempel som kanske kan leda dig på spår. Det blev helt fantastiskt, med lite modifierande så har jag nu fått det att svara mot textrutan. <Hej Sven, tyvärr så fungerade inte länken.> Nej Sven, inte så utan den länken som du la in här... Ok goooooooooa vän. Ok vad är det för fel på RadarCirkel. Sven, problemet är att länkar till programarkivet inte verkar funkar i den nya designen, däremot funkar det om man går tillbaka till gamla designen (http://dev.pellesoft.se) Efter lite modifieringar så har jag nu ett väldigt bra fungerande programm. JAg måste komma med ytterliggare fråga, i detta excempel så är ju alla avstånd i punkter, men om jag ville översätta det till mm, går det? Avståndet i mm kommer variera beroende på var den visas (mobiltelefon? 18" skärm? 19"? 21" widescreen? TV? projektor?). Det är ganska svårt att göra nån pålitlig översättning pixlar/bildpunkter <=> (milli)meter som gäller generellt.Dela upp en cirkel i lika stora delar
Så långt är det inte så svårt, och det har jag programmerat, men sen vill jag gärna rita upp detta också och det blir ju en annan femma.
Själva cirklen ritar jag så här:
int r = 200;
int x = this.Height / 2, y = this.Width / 2;
Rectangle rectangleObj = new Rectangle(x - r, y - r, r, r);
Graphics g = this.CreateGraphics();
Rectangle drawArea1 = new Rectangle(x - r, y - r, r, r);
LinearGradientBrush linearBrush = new LinearGradientBrush(drawArea1, Color.AntiqueWhite,
Color.Red, LinearGradientMode.ForwardDiagonal);
g.FillEllipse(linearBrush, x - r, y - r, r, r);
Pen myPen = new Pen(Color.Red);
g.DrawEllipse(myPen, rectangleObj);
Problemet är nu, hur skall jag kunna rita in delningarna, gärna som små cirklar).
Sv: Dela upp en cirkel i lika stora delar
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
var circle = new CircleDefinition()
{
Radius = 200,
NrOfSections = 14, // fetch these values from a textbox/config file or whatever...
HoleRadius = 20,
HoleOffset = 30,
Center = new Point(this.Width / 2, this.Height / 2)
};
DrawCircle(g, circle);
DrawHoles(g, circle);
}
private void DrawCircle(Graphics g, CircleDefinition circle)
{
Rectangle rectangleObj = new Rectangle(circle.Center.X - circle.Radius, circle.Center.Y - circle.Radius, circle.Radius * 2, circle.Radius * 2);
Rectangle drawArea1 = new Rectangle(circle.Center.X - circle.Radius, circle.Center.Y - circle.Radius, circle.Radius * 2, circle.Radius * 2);
LinearGradientBrush linearBrush = new LinearGradientBrush(drawArea1, Color.AntiqueWhite,
Color.Red, LinearGradientMode.ForwardDiagonal);
g.FillEllipse(linearBrush, circle.Center.X - circle.Radius, circle.Center.Y - circle.Radius, circle.Radius * 2, circle.Radius * 2);
Pen myPen = new Pen(Color.Red);
g.DrawEllipse(myPen, rectangleObj);
}
private void DrawHoles(Graphics g, CircleDefinition circle)
{
var rad = 0d;
var radPerSection = 2 * Math.PI / circle.NrOfSections;
var pen = new Pen(Color.Black);
var distanceFromCenter = circle.Radius - circle.HoleOffset;
for (var sectionNr = 0; sectionNr < circle.NrOfSections; sectionNr++)
{
var holeBoundingBox = new Rectangle(
circle.Center.X - circle.HoleRadius + (int)(distanceFromCenter * Math.Sin(rad)),
circle.Center.Y - circle.HoleRadius + (int)(distanceFromCenter * Math.Cos(rad)),
circle.HoleRadius * 2,
circle.HoleRadius * 2);
g.DrawEllipse(pen, holeBoundingBox);
rad += radPerSection;
}
}
private class CircleDefinition
{
public Point Center { get; set; }
public int Radius { get; set; }
public int HoleRadius { get; set; } // Radius of the holes
public int HoleOffset { get; set; } // Distance between the circle's rim and the centerpoint of the holes
public int NrOfSections { get; set; }
}
Sv:Dela upp en cirkel i lika stora delar
Inga "tårtbitar" utan små hål (cirklar) ville jag ha runt den stora cirklens radie.Sv: Dela upp en cirkel i lika stora delar
Programarkivet:Cirkel matematik RadarSv:Dela upp en cirkel i lika stora delar
Ett problem återstår, i en listbox så behöver jag lägga in de aktuella graderna, dvs t ex 0, 120, 240 osv. JAg har gjort detta men det stämmer inte med hur hålen ritas upp. Vad tror du?
private void doCalcylate()
{
try
{
decimal slutResultat = 0;
listBox1.Items.Clear();
lInfo.Text = "";
decimal times = 0;
if (tDevision.Text.Length > 0)
{
times = Convert.ToDecimal(tDevision.Text);
decimal result = 360 / Math.Round(times, 0);
decimal firstResult = result;
listBox1.Items.Add(0);
for (int i = 1; i < times; i++)
{
Application.DoEvents();
slutResultat = Math.Round(firstResult, 0);
listBox1.Items.Add(slutResultat.ToString());
firstResult += result;
}
}
Application.DoEvents();
}
catch (Exception fel)
{
lInfo.Text = fel.Message;
}
}
I övrikt så fungerar det kanonbra.
MODEFIERAT
Jag vet inte vad jag hadde tänkt på, men det verkar som om detta skall stämma???
int slutResultat = 0;
int firstResult = 0;
listBox1.Items.Clear();
lInfo.Text = "";
int times = 0;
if (tDevision.Text.Length > 0)
{
times = Convert.ToInt32(tDevision.Text);
int result = 360 ;
firstResult = result / times;
for (int i = 0; i < times; i++)
{
Application.DoEvents();
slutResultat += firstResult;
listBox1.Items.Add(slutResultat.ToString());
}
}
Sv: Dela upp en cirkel i lika stora delar
Nääää förstår det.Ni har glömt gamla kära VB6
Ni måste ha Vb6 Runtime i Ert System32.
http://support.microsoft.com/kb/290887Sv:Dela upp en cirkel i lika stora delar
Sv: Dela upp en cirkel i lika stora delar
Jag förstår.Download funkar hos mig.
Ahhhhhhhhh . Va fae.... skall Vi inte kunna skriva kod dom funkar universelt ?
No big deal jag gjorde ett prog som illustrerade en radarskärm.
Som jag alltid sagt/propagerat gör Stand Alone program.
DSSv:Dela upp en cirkel i lika stora delar
Programarkivet:Cirkel matematik Radar
Vad kan du om Ortonoma koordinator !?
!!!!!!Sv: Dela upp en cirkel i lika stora delar
Sv:Dela upp en cirkel i lika stora delar
Jag tackar för ditt fina förslag Thomas ;-)Sv: Dela upp en cirkel i lika stora delar
Sv:Dela upp en cirkel i lika stora delar