float circleX; float circleY; float circleRadius = 100; float circleSize = circleRadius * 2; float smallCircleRadius = 25; float smallCircleSize = smallCircleRadius * 2; void setup() { size(400, 400); smooth(); noFill(); // Processing-Variablen 'width' und 'height' // koennen erst nach size() verwendet werden! circleX = width / 2; circleY = height / 2; } void draw() { background(255); stroke(0); // Aktuelle Position des kleinen Kreises // an der Mausposition float x = mouseX; float y = mouseY; // Zeichne großen Kreis ellipse(circleX, circleY, circleSize, circleSize); if (circlesIntersect(x, y, smallCircleRadius, circleX, circleY, circleRadius)) { stroke(255, 0, 0); } ellipse(x, y, smallCircleSize, smallCircleSize); // Abstrandslinie stroke(0); line(circleX, circleY, x, y); float degree1 = atan2(y - circleY, x - circleX); // Radius grosser Kreis stroke(0, 0, 255); pushMatrix(); translate(circleX, circleY); rotate(degree1); line(0, 0, circleRadius, 0); popMatrix(); // Radius kleiner Kreis stroke(0, 255, 0); pushMatrix(); translate(x, y); rotate(PI + degree1); line(0, 0, smallCircleRadius, 0); popMatrix(); // Visualisierung pushMatrix(); translate(20, height - 20); stroke(0); line(0, 0, dist(x, y, circleX, circleY), 0); stroke(0, 0, 255); line(0, 5, circleRadius, 5); stroke(0, 255, 0); line(circleRadius, 5, circleRadius + smallCircleRadius, 5); popMatrix(); } boolean circlesIntersect(float circleX1, float circleY1, float circleRadius1, float circleX2, float circleY2, float circleRadius2) { return circleRadius1 + circleRadius2 >= dist(circleX1, circleY1, circleX2, circleY2); }