Constrained random points on a circle: Difference between revisions
Content added Content deleted
(→{{header|Perl 6}}: oops, totally misread the task. My bad.) |
|||
Line 2,078: | Line 2,078: | ||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
[[Category:Scala Implementations]]{{libheader|Scala}}<lang Scala>import java.awt.{ Color, geom,Graphics2D ,Rectangle} |
|||
{{works with|Scala|2.9.1}} |
|||
⚫ | |||
⚫ | |||
import scala.swing.{MainFrame,Panel,SimpleSwingApplication} |
|||
import scala.swing.Swing.pair2Dimension |
|||
import scala.util.Random |
|||
import scala.swing.event._ |
|||
import java.awt.{Color, Dimension, Graphics, Graphics2D, Point, geom} |
|||
import scala.util.Random |
|||
⚫ | |||
⚫ | |||
//min/max of display-x resp. y |
//min/max of display-x resp. y |
||
val dx0,dy0 = 30 |
val dx0, dy0 = 30; val dxm, dym = 430 |
||
val |
val prefSizeX, prefSizeY = 480 |
||
⚫ | |||
⚫ | |||
val prefSizeX,prefSizeY = 480 |
|||
⚫ | |||
⚫ | |||
val xmax, ymax = 20; val xmin, ymin = -xmax |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
object Coord { |
|||
def apply(x: Double, y: Double) = new Coord(x, y) |
|||
⚫ | |||
⚫ | |||
val points = |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
private def ui = new Panel { |
|||
background = Color.white |
background = Color.white |
||
preferredSize = (prefSizeX, prefSizeY) |
preferredSize = (prefSizeX, prefSizeY) |
||
class Circle(center: Coord, r: Double, val color: Color) { |
|||
val dr = (Coord(r, 0).dx - pcentre.dx) * 2 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
object Circle { |
|||
⚫ | |||
⚫ | |||
⚫ | |||
new Circle(Coord(x, y), r, color) |
|||
⚫ | |||
} |
} |
||
⚫ | |||
⚫ | |||
val |
val pxmax = Coord(xmax, 0); val pxmin = Coord(xmin, 0) |
||
val |
val pymax = Coord(0, ymax); val pymin = Coord(0, ymin) |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
val pxmax = Coord(xmax,0); val pxmin = Coord(xmin,0) |
|||
val pymax = Coord(0,ymax); val pymin = Coord(0,ymin) |
|||
//axes: |
//axes: |
||
val a_path = new geom.GeneralPath |
|||
a_path.moveTo(pxmin.dx, pxmin.dy); a_path.lineTo(pxmax.dx, pxmax.dy) //x-axis |
a_path.moveTo(pxmin.dx, pxmin.dy); a_path.lineTo(pxmax.dx, pxmax.dy) //x-axis |
||
a_path.moveTo(pymin.dx, pymin.dy); a_path.lineTo(pymax.dx, pymax.dy) //y-axis |
a_path.moveTo(pymin.dx, pymin.dy); a_path.lineTo(pymax.dx, pymax.dy) //y-axis |
||
//labeling: |
//labeling: |
||
val labels = List(-20,-15,-10,-5,5,10,15,20) |
val labels = List(-20, -15, -10, -5, 5, 10, 15, 20) |
||
labels.foreach{x=>{val p=Coord(x,0);a_path.moveTo(p.dx,p.dy-3);a_path.lineTo(p.dx,p.dy+3)}} |
labels.foreach { x => { val p = Coord(x, 0); a_path.moveTo(p.dx, p.dy - 3); a_path.lineTo(p.dx, p.dy + 3) } } |
||
labels.foreach{y=>{val p=Coord(0,y);a_path.moveTo(p.dx-3,p.dy);a_path.lineTo(p.dx+3,p.dy)}} |
labels.foreach { y => { val p = Coord(0, y); a_path.moveTo(p.dx - 3, p.dy); a_path.lineTo(p.dx + 3, p.dy) } } |
||
val xlabels = labels.map(x=>{val p=Coord(x,0); Triple(x.toString,p.dx-3,p.dy+20)}) |
val xlabels = labels.map(x => { val p = Coord(x, 0); Triple(x.toString, p.dx - 3, p.dy + 20) }) |
||
val ylabels = labels.map(y=>{val p=Coord(0,y); Triple(y.toString,p.dx-20,p.dy+5)}) |
val ylabels = labels.map(y => { val p = Coord(0, y); Triple(y.toString, p.dx - 20, p.dy + 5) }) |
||
//circles: |
//circles: |
||
val circles = cs.map{case (x,y,r,c)=>Circle(x,y,r, |
val circles = cs.map { case (x, y, r, c) => Circle(x, y, r, palet(c)) } |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
override def paintComponent(g: Graphics2D) = { |
override def paintComponent(g: Graphics2D) = { |
||
super.paintComponent(g) |
super.paintComponent(g) |
||
circles.foreach{c=>{g.setColor(c. |
circles.foreach { c => { g.setColor(c.color); g.drawOval(c.dx, c.dy, c.dr, c.dr) } } |
||
g.setColor( |
g.setColor(palet("r")); points.foreach(g.draw(_)) |
||
g.setColor( |
g.setColor(palet("s")); g.draw(a_path) |
||
xlabels.foreach{case (text,px,py)=>g.drawString(text,px,py)} |
xlabels.foreach { case (text, px, py) => g.drawString(text, px, py) } |
||
ylabels.foreach{case (text,px,py)=>g.drawString(text,px,py)} |
ylabels.foreach { case (text, px, py) => g.drawString(text, px, py) } |
||
} |
} |
||
} |
} // def ui |
||
⚫ | |||
⚫ | |||
def top = new MainFrame { |
def top = new MainFrame { |