Bilder bestimmen
Bilder bestimmen
Schönen guten Abend!
Ich habe eine Frage bzgl. meines Programmes.
Wie kann ich auf einem Bild dem Programm Flächen zuweisen?
Also ich möchte, dass ich auf einem Bild mehrere Flächen andrücken kann, und das Programm dann weiß, welche Fläche ich gedrückt habe.
Und mit dieser Fläche soll es dann eben weiterarbeiten.
MfG
Ich habe eine Frage bzgl. meines Programmes.
Wie kann ich auf einem Bild dem Programm Flächen zuweisen?
Also ich möchte, dass ich auf einem Bild mehrere Flächen andrücken kann, und das Programm dann weiß, welche Fläche ich gedrückt habe.
Und mit dieser Fläche soll es dann eben weiterarbeiten.
MfG
-
- Beiträge: 957
- Registriert: Mo 11. Sep 2006, 22:56
Re: Bilder bestimmen
Schönen guten Abend!
du musst deines Programms im Bild die Flächen zuweisen, ganz einfach
indem du beim Bild andrücken mehrere Flächen,welche Bilder gedrückt sind.
Mit dieser Bild Drück Flächen soll kannst du einfach weiterarbeiten.
(die Bots werden auch immer schlechter)
du musst deines Programms im Bild die Flächen zuweisen, ganz einfach
indem du beim Bild andrücken mehrere Flächen,welche Bilder gedrückt sind.
Mit dieser Bild Drück Flächen soll kannst du einfach weiterarbeiten.
Code: Alles auswählen
function drückflächebild (bildrückflache:flächedrückprogramm,flächedrückbild:drückflächeprogramflächedrück);
(die Bots werden auch immer schlechter)
-
- Beiträge: 6167
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Bilder bestimmen
(die Bots werden auch immer schlechter)
Ich denke eher, dies ist jemand der nicht richtig deutsch kann.
Vielleicht meint er einfach so etwas in dieser Art:
Code: Alles auswählen
Canvas.LineTo(Mouse.CursorPos.x, Mouse.CursorPos.y);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Bilder bestimmen
Mathias hat geschrieben:(die Bots werden auch immer schlechter)
Ich denke eher, dies ist jemand der nicht richtig deutsch kann.
Vielleicht meint er einfach so etwas in dieser Art:Code: Alles auswählen
Canvas.LineTo(Mouse.CursorPos.x, Mouse.CursorPos.y);
Und woher nehme ich die Position?
Und wie sage ich dann dem Programm, was die Fläche für einen Wert hat und was es damit machen soll?
-
- Beiträge: 6167
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Bilder bestimmen
Was willst du genau machen, das Bild wie ein Schachbrett aufzuteilen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Bilder bestimmen
Mathias hat geschrieben:Was willst du genau machen, das Bild wie ein Schachbrett aufzuteilen ?
Wie eine Wurfscheibe
Und da soll man die Fläche andrücken, welche man getroffen hat
-
- Beiträge: 6167
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Bilder bestimmen
Sind die Flächen rechteckig, oder sind diese Rund ?
Wen sie nicht Rechteckig sind, steht dir eine grosse Rechnerei vor.
Dies könnte dir weiter helfen, die Mausposition zu ermitteln.
Wen sie nicht Rechteckig sind, steht dir eine grosse Rechnerei vor.
Dies könnte dir weiter helfen, die Mausposition zu ermitteln.
Code: Alles auswählen
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
begin
if ssLeft in Shift then begin
Canvas.LineTo(x, y);
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Bilder bestimmen
Mathias hat geschrieben:Sind die Flächen rechteckig, oder sind diese Rund ?
Wen sie nicht Rechteckig sind, steht dir eine grosse Rechnerei vor.
Dies könnte dir weiter helfen, die Mausposition zu ermitteln.Code: Alles auswählen
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
begin
if ssLeft in Shift then begin
Canvas.LineTo(x, y);
end;
end;
sind sie leider nicht
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2636
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Bilder bestimmen
Holzhammermethode: Du machst dir ein zweites Bild, in welchem du jedes Feld in einer anderen Farbe einfärbst. Das lädst du dann unsichtbar in dein Programm. Klickt ein User auf das eigentlich Bild, schnappst du dir die Mauskoordinaten. Dann prüfst du welche Farbe der Pixel an den gleichen Koordinaten im versteckten Bild hat.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 306
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Bilder bestimmen
.oO
Ich denk kreisrund wäre die Sache noch nicht wirklich schwierig, mit der Rechnerei. Für Segmente einer Dartscheibe wäre das ganze wohl schon etwas aufwändig.....
m.fuchs hat geschrieben:Holzhammermethode: Du machst dir ein zweites Bild, in welchem du jedes Feld in einer anderen Farbe einfärbst. Das lädst du dann unsichtbar in dein Programm. Klickt ein User auf das eigentlich Bild, schnappst du dir die Mauskoordinaten. Dann prüfst du welche Farbe der Pixel an den gleichen Koordinaten im versteckten Bild hat.
Ich denk kreisrund wäre die Sache noch nicht wirklich schwierig, mit der Rechnerei. Für Segmente einer Dartscheibe wäre das ganze wohl schon etwas aufwändig.....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Bilder bestimmen
u-boot hat geschrieben:Ich denk kreisrund wäre die Sache noch nicht wirklich schwierig, mit der Rechnerei. Für Segmente einer Dartscheibe wäre das ganze wohl schon etwas aufwändig.....
Eigentlich nicht. Die x-y-Koordinaten der Maus in Polarkoordinaten umrechnen und dann per Radius und Winkel selektieren. Ein Zuordnung durch Array (elegant) oder if-then (Holzhammer) muss eh erfolgen, weil die Werte auf der Dartscheibe ja "willkürlich" verteilt sind und man auch noch Sonderfälle wie Bullseye und Double, Triple beachten muss.
Andererseits, es gibt doch Dartscheiben mit Kontakten. Die kann man mit einem Arduino abfragen und per RS232 an den Computer senden.
Re: Bilder bestimmen
Hey, u-boot, da hast du wohl in der Mathematik gefehlt?
Siehe dazu https://de.wikipedia.org/wiki/Datei:Dar ... sungen.svg
Ungetestet:
Siehe dazu https://de.wikipedia.org/wiki/Datei:Dar ... sungen.svg
- Zuerst den Abstand des Auftreffpunkts von der Mitte der Dartscheibe berechnen.
- Mit den Radien der Ringe "Bull's eye", "Bull", "Triple ring" und "Double ring" vergleichen
- Dann den Winkel zwischen x-Achse und der Verbindungslinie Mitte-Auftreffpunkt berechnen.
- Die Dartscheibe hat 20 gleiche "Kuchenstücke", jedes spannt einen Winkel von 360/20 = 18° auf.
- Damit weiß man, in welchem "Kuchenstück" der Pfeil gelandet ist (die Verdrehung um 1/2 Kuchenstück ist noch zu berücksichtigen)
Ungetestet:
Code: Alles auswählen
type
TRing = (rBullsEye, rBull, rTripleInner, rTripleOuter, rDoubleInner, rDoubleOuter);
const
Radius: array[TRing] of Double = (
12.7/2, // Bull's Eye
31.8/2, // Bull
99/2, // Triple Ring, innen
107/2, // TripleRing, außen
162/2, // Double Ring, innen
170/2 // Double Ring, außen
);
SegmentPoints: array[0..19] of Integer = (20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5);
BullsEyePoints = 50;
BullPoints = 25;
SegmentAngle = 360/20;
function DartPoints(x, y: Double): Integer;
var
angle: Double;
r: Double;
segment: Integer;
begin
r := sqrt(x*x + y*y);
if r < Radius(rBullsEye) then
Result := BullsEyePoints
else if r < Radius(rBull) then
Result := BullsPoints
else begin
angle := -arctan2(y, x) / pi * 180 + 90 + SegmentAngle/2;
// -, damit der Winkel im Uhrzeigersinn läuft
// +90 + SegmentAngle/2, damit der Winkel am linken Rand des 20-Punkte Segments beginnt
if angle < 0 then angle := angle + 360;
segment := angle mod SegmentAngle;
Result := SegmentPoints[segment];
if (r >= Radius(rTripleInner)) and (r <= Radius(rTripleOuter) then
Result := Result * 3
else
if (r >= Radius(rDoubleInner)) and (r <= Radius(rDoubleOuter) then
Result := Result * 2
else if (r > Radius(rDoubleOuter) then
Result := 0;
end;
end;