none
Die Funktion ArcTo ist sehr ungenau RRS feed

  • Frage

  • Die Funktion ArcTo zeichnet bei großen Radien sehr ungenau.

    In mein Beispiel zeichne ich ein Bogen und der dazugehörige Saite. Der Anfangspunkt und der Endpunkt sind ganz unterschiedlich.

    In Mein Beispiel Die Entfernung des Startpunktes und des Endpunktes von Mittelpunkt beträgt 7477,9 bzw. 7477,8. Das kommt von Rundungsfehlern. Aber dürften keinen mehrere Pixel Unterschiede vorhanden sein.

    Wie kann ich dieses Problem umgehen?

    Main Beispiel in einen MFC Anwendung:

    void CChildView::OnPaint()
    {
    CPaintDC dc(this);
    int mpx=4151; // Mittelpunkt der Kreisbogen
    int mpy=-6262;
    int r=7477; // Radius

    dc.MoveTo(110, 30); // Bogen
    dc.ArcTo(mpx-r, mpy-r, mpx+r, mpy+r, 110, 30, 1062, 548);
    dc.MoveTo(110, 30); // Saite
    dc.LineTo(1062, 548);
    }

     

    Freitag, 14. Januar 2011 12:41

Antworten

  • Hallo,

    bei den von Dir verwendeten Werten stelle ich Dir natürlich die Frage, ob die Werte 110,30 und 1062, 548 wirklich auf Deiner Kreisbahn/Ellipsenbahn liegen. Ich bin etwas faul, darum bitte ich Dich den mathematischen Beweis mir zu bringen, dass diese Punkte auf der Bahn liegen.

    Zu der Function selber wird auhcbeschrieben wie der "Start" und das "Ende" sich bilden, nämlich wenn die vom Mittelpunkt nach außen gebildete radiale Linie geschnitten wird. Aus meiner Sicht gehe ich davon aus, dass Deine Punkte nicht auf der Kreis/Ellipsenbahn liegen. Die von Dir angegebenen Punkte bei der ArcTo Funktion sind keine Start / Endpunkte, sondern die Punkte der Radiallinie aus dem Mittelpunkt.

     

    EDIT------

    Für den X Wert 110 wäre der korrekte Y Wert wo der Kreis geschnitten wird 28.93.

    Für den X Wert 1062 wäre der korrekte Y Wert wo der Kreis geschnitten wird 547.08.

    Da wäre schon die erste Ungenauigkeit. Für die Prüfung wo der Kreis sich mit der radialen Linie wirklich trifft, müsste man jetzt ermitteln, wo sich die Kreisgleichung 

    (x-4151)²+(y+6262)²=7477²

    und die Geradengleichung

    y=-(6292/4041)*(x-4151)-6262 = (ca.) -1.55*x+172.05

    schneidet.

    Ich denke es wird langsam klar wo die ungenauigkeiten dann her kommen :-)

    Samstag, 15. Januar 2011 13:10