kostenloser Webspace werbefrei: lima-city


Berechnungen von Punkten im Rechteck mit Programm

lima-cityForumSonstigesOff-Topic

  1. Autor dieses Themas

    sidezockinglp

    sidezockinglp hat kostenlosen Webspace.

    Hey Community,

    Sitzte nun seit einigen Tagen an einem mathematischen Lösungsproblem und mir fällt momentan kein Weg ein. Auch weil die Berechnungen in einem JS Script berechnet werden sollen, also müssen die Rechnungen von einem Script ausgeführt werden können. Wie die Lösung dann in JS umgesetzt wird bekomme ich hoffentlich hin deshalb schreibe ich in Off-Topic um hoffentlich jemanden zu finden der mir den richtigen Tipp gibt.

    Erstmal zur Frage: Ich habe eine Strecke AB. Die soll zu einem Reckteck ergänzt werden bei dem die Breite fest ist. Schwer zu erklären, deshalb eine Zeichnung: https://www.bilder-upload.eu/bild-be2839-1551456740.png.html
    Wegen Reckteck also alles mit 90Grad Winkeln.
    --> Ich suche jetzt die Koordinaten von allen anderen Punkten.

    Habe da z.b an das Skalarprodukt 0 gedacht, brauche aber doch ein Gleichungssystem um das zu Lösen. Wüsste nicht wie ein Algorithmus das können soll. Auch mit Geradengleichungen tut man sich im Script bisschen schwer.

    Es sieht eigentlich so leicht aus und trotzdem komme ich nicht drauf :wall:

    Ich hoffe jemand kann mir helfen oder mir einen Wink geben. Wenn was unklar ist einfach schreiben.
    Gruß
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. horstexplorer

    horstexplorer hat kostenlosen Webspace.

    Du könntest die Strecke AB als lineare Funktion nehmen und die Normale(n) an A und B berechnen. Darauf liegen dann deine Punkte CDEF welche du sicherlich über den Abstand zu B bzw A bekommen kannst.
    Also z.Bsp:

    A(1|1) B(3|2)
    Dann wäre die Funktion
    f(x)=0.5x+0.5
    Und die Normalen an A und B
    a(x)=-2x+3
    b(x)=-2x+8
    Sagen wir wir suchen die Punkte bei einer Breite von 2 an B:
    2=sqrt((x-3)^2+(b(x)-2)^2) nach x umstellen.
    Das müsste dann 2 Werte für x geben welche in b(x) eingesetzt werden um die Koordinaten von F und C zu bestimmen.
    Selbiges natürlich auch noch für Punkt A.

    http://prntscr.com/mrxd46
    http://prntscr.com/mrxeyt


    Beitrag zuletzt geändert: 1.3.2019 17:48:43 von horstexplorer
  4. Autor dieses Themas

    sidezockinglp

    sidezockinglp hat kostenlosen Webspace.

    Hey @horstexplorer

    erstmal Danke für die schnelle Antwort und die Idee. Ich hab das jetzt mal durchgedacht: du schreibst:
    2=sqrt((x-3)^2+(b(x)-2)^2) nach x umstellen.

    Wenn ich mich nicht Irre muss man dafür Quadrieren, dann braucht man Binomische Formel 1 oder 2 und dann noch die Mitternachtsformel einmal mit Minus und einmal mit Plus.

    Das hört sich an als wäre das in einem Programm schwierig oder sogar unlösbar. Oder gehe ich da falsch ran?

    Freue mich auf eine Antwort. :)
  5. prinz-und-gloeckner

    prinz-und-gloeckner hat kostenlosen Webspace.

    Auf JavaScript hatte ich keine Lust, aber mit PHP ist ein wenig Vektorrechnung ja auch kein Problem:

    <?php
    # Punkte
    $ax=2.75;
    $ay=1.97;
    $bx=5.85;
    $by=5.89;

    # Vektor a nach b
    $cx=$bx-$ax;
    $cy=$by-$ay;
    # Betrag
    $cb=sqrt($cx*$cx+$cy*$cy);

    # Einheitsvektor:
    $ex=$cx/$cb;
    $ey=$cy/$cb;
    # Senkrecht dazu
    $sx=$ey;
    $sy=-$ex;

    # Das soll zwei (Zentimeter) lang sein:
    $zx=2*$sx;
    $zy=2*$sy;

    # Eckpunkte
    $p1x=$ax+$zx;
    $p1y=$ay+$zy;
    $p2x=$ax-$zx;
    $p2y=$ay-$zy;
    $p3x=$bx+$zx;
    $p3y=$by+$zy;
    $p4x=$bx-$zx;
    $p4y=$by-$zy;

    # Graphikausgabe
    $text='<g font-size="20">
    <text x="20" y="100">Betrag: '.$cb.'</text>
    <text x="20" y="130">Koordinaten:</text>
    <text x="20" y="160">('.$p1x.'|'.$p1y.')</text>
    <text x="20" y="190">('.$p2x.'|'.$p2y.')</text>
    <text x="20" y="220">('.$p3x.'|'.$p3y.')</text>
    <text x="20" y="250">('.$p4x.'|'.$p4y.')</text>
    </g>
    ';

    $q1x=100*$p1x;
    $q1y=100*$p1y;
    $q2x=100*$p2x;
    $q2y=100*$p2y;
    $q3x=100*$p3x;
    $q3y=100*$p3y;
    $q4x=100*$p4x;
    $q4y=100*$p4y;

    # Raster
    $d='';
    $kanz=10;
    for ($k = 0; $k <=$kanz; $k++) {
    $kk=100*$k;
    $d.="M $kk 0 v 1000 M 0 $kk h 1000
    ";
    }
    $raus="<path d='$d' fill='none' stroke='#888' />
    ";
    # Rechteck
    $raus.="<path d='M $q1x,$q1y $q2x,$q2y $q4x,$q4y $q3x,$q3y z' fill='none' stroke='blue' />";

    $content="Content-type: image/svg+xml; charset=utf-8";
    header($content);
    # xml-Zeile ausgeben
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    ?>
    <svg viewBox="0 0 1000 1000"
    height="100%"
    width="100%"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    version="1.1"
    xml:lang="de">
    <title>Rechteck</title>

    <g transform="translate(0 1000) scale(1 -1)">

    <?php echo $raus ?>

    </g>

    <?php echo $text ?>

    </svg>

  6. horstexplorer

    horstexplorer hat kostenlosen Webspace.

    Das hört sich an als wäre das in einem Programm schwierig oder sogar unlösbar. Oder gehe ich da falsch ran?

    Nicht unbedingt einfach, aber auch nichts was hochkompliziert ist. Du musst halt alles 'umstellen' und dann kann man das recht einfach verwenden mit Variablen. Könnte man sicher auch automatisch lösen, wäre dann aber eben schwieriger.

    Das von prinz-und-gloeckner ist da aber die deutlich einfachere Variante da es weniger Schritte benötigt.
  7. Autor dieses Themas

    sidezockinglp

    sidezockinglp hat kostenlosen Webspace.

    Hey @prinz-und-gloeckner

    Riesen Dank für deine Antwort. Hatte gehofft es gäbe so einen leichten Weg den ich einfach nicht bedacht habe.

    prinz-und-gloeckner schrieb:
    Auf JavaScript hatte ich keine Lust, aber mit PHP ist ein wenig Vektorrechnung ja auch kein Problem:
    Kein Problem liebe dich trotzdem. Ist ja dann kein Problem mehr das umzuschreiben.

    Für alle die das selbe Problem haben nochmal die Lösung in JS:

    //Punkte
    			var ax=last_point[0];
    			var ay=last_point[1];
    			var bx=incoming[0];
    			var by=incoming[1];
    
    			//Vektor a nach b
    			var cx=bx-ax;
    			var cy=by-ay;
    			// Betrag
    			var cb=Math.sqrt(cx*cx+cy*cy);
    
    			// Einheitsvektor:
    			var ex=cx/cb;
    			var ey=cy/cb;
    			// Senkrecht dazu
    			var sx=ey;
    			var sy=-ex;
    
    			var zx=15*sx;
    			var zy=15*sy;
    
    			// Eckpunkte
    			var p1x=ax+zx;
    			var p1y=ay+zy;
    			var p2x=ax-zx;
    			var p2y=ay-zy;
    			var p3x=bx+zx;
    			var p3y=by+zy;
    			var p4x=bx-zx;
    			var p4y=by-zy;
    			console.log(p1x + "-" + p1y);
    			console.log(p2x + "-" + p2y);
    			console.log(p3x + "-" + p3y);
    			console.log(p4x + "-" + p4y);
    			ctx.beginPath();
    
    			ctx.moveTo(p1x, p1y);
    
    			ctx.lineTo(p2x, p2y);
    			ctx.lineTo(p4x, p4y);
    			ctx.lineTo(p3x, p3y);
    			ctx.lineTo(p1x, p1y);
    			ctx.strokeStyle = "#FF0000";
    			ctx.stroke();


    Grüße :)
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!