Jump to content

Plot coordinate pairs: Difference between revisions

m (→‎{{header|Java}}: Correct Lang tag)
(→‎{{header|Scala}}: Maintained)
Line 1,386:
 
=={{header|Scala}}==
<lang Scala>import scala.swing._Swing.pair2Dimension
import scala.swing.Swing._{ MainFrame, Panel, Rectangle }
import scalajava.swingawt.{MainFrame Color, PanelGraphics2D, SimpleGUIApplicationgeom }
import scala.swing.event._
import java.awt.{Color, Dimension, Graphics, Graphics2D, Point, geom}
 
object PlotCoordPairs extends scala.swing.SimpleSwingApplication {
 
//min/max of display-x resp. y
val (dx0, dy0) = (70, 30)
val dy0(dxm, dym) = 30(670, 430)
 
val dxm = 670
val dym(prefSizeX, prefSizeY) = 430(720, 480)
 
val prefSizeX = 720
val prefSizeY = 480
lazy val ui = new Panel {
background = Color.white
preferredSize = (prefSizeX, prefSizeY)
 
import math._
val xmax = {
val f1 = pow(10, log10(xs.max).toInt)
val f2 = if (f1 < 10) 10 else round(xs.max / f1) * f1
if (f2 >= xs.max) f2 else (round(xs.max / f1) + 1) * f1
}
val ymax = {
val f1 = pow(10, log10(ys.max).toInt)
val f2 = if (f1 < 10) 10 else round(ys.max / f1) * f1
if (f2 >= ys.max) f2 else (round(ys.max / f1) + 1) * f1
}
 
val xinterv = xmax/xs.size
val (xinterv, yinterv) = (xmax / xs.size, ymax / xs.size)
 
case class Coord(x: Double, y: Double) {
val (dx, dy) = ((x / xmax * (dxm - dx0) + dx0).toInt, (dym - y / ymax * (dym - dy0)).toInt)
val dy = (dym-y/ymax*(dym-dy0)).toInt
}
 
val pcentre = Coord(0, 0)
val pxmax = Coord(xmax, 0)
val pymax = Coord(0, ymax)
 
background = Color.white
preferredSize = (prefSizeX, prefSizeY)
 
//axes:
varval a_path = new geom.GeneralPath
a_path.moveTo(pcentrepxmax.dx, pcentrepxmax.dy)
a_path.lineTo(pxmaxpcentre.dx, pxmaxpcentre.dy) //x-axis
a_path.moveTo(pcentre.dx, pcentre.dy)
a_path.lineTo(pymax.dx, pymax.dy) //y-axis
// interval signsticks:
(0 to xs.size-1).map(i => Coord(i * xinterv, 0)).map(p => {a_path.moveTo(p.dx,p.dy);a_path.lineTo(p.dx,p.dy+5)})
(0 to xs.size-1).map(i=>Coord(0, i*yinterv)).map(p=>{a_path.moveTo(p.dx, p.dy);a_path.lineTo(p.dx-5,p.dy)})
a_path.lineTo(p.dx, p.dy + 5)
})
xs.map(i => Coord(0, i * yinterv)).map(p => {
a_path.moveTo(pcentrep.dx, pcentrep.dy)
a_path.lineTo(p.dx - 5, p.dy)
})
 
//grid:
varval g_path = new geom.GeneralPath
(1 to xs.size).
(1 to xs.size).map(i=>Coord(i*xinterv, 0)).map(p=>{g_path.moveTo(p.dx,p.dy);g_path.lineTo(Coord(p.x,ymax).dx,Coord(p.x,ymax).dy)})
(1 to xs.size).map(i => Coord(0i * xinterv, i*yinterv0)).map(p => {g_path.moveTo(p.dx,p.dy);g_path.lineTo(Coord(xmax,p.y).dx,Coord(xmax,p.y).dy)})
g_path.moveTo(p.dx, p.dy);
(1 to xs.size).map(i=>Coord(i*xinterv, 0)).map(p=>{g_path.moveTo(p.dx,p.dy); g_path.lineTo(Coord(p.x, ymax).dx, Coord(p.x, ymax).dy)})
})
val ylabels = (01 to xs.size).map(i =>{val p=Coord(0, i * yinterv); Triple).map(p.y.toInt.toString,p.dx-30,p.dy+5)}) => {
g_path.moveTo(p.dx, p.dy);
g_path.lineTo(Coord(xmax, p.y).dx, Coord(xmax, p.y).dy)
})
 
//labeling:
val xlabels = (0 to xs.size).map(i => {val p=Coord(i*xinterv,0); Triple(p.x.toInt.toString,p.dx-3,p.dy+20)})
val p = Coord(i * xinterv, 0)
val ylabels = (0 to xs.size).map(i=>{val p=Coord(0,i*yinterv); Triple(p.y.toInt.toString,p.dx-30,p.dy+5)})
Triple(p.x.toInt.toString, p.dx - 3, p.dy + 20)
})
val xintervylabels = xmax/(0 to xs.size).map(i => {
val p = Coord(0, i * yinterv)
Triple(p.y.toInt.toString, p.dx - 30, p.dy + 5)
})
 
//curve:
varval path = new geom.GeneralPath
val curve = (0 to xs.size-1).map(i => Coord(xs(i), ys(i)))
path.moveTo(curve(0).head.dx, curve(0).head.dy)
curve.map(p => path.lineTo(p.dx, p.dy))
//...flag all function values:
val rects = curve.map(p => new Rectangle(p.dx - 3, p.dy - 3, 6, 6))
 
override def paintComponent(g: Graphics2D) = {
super.paintComponent(g)
Line 1,464 ⟶ 1,477:
g.setColor(Color.black)
g.draw(a_path)
xlabels.map(t => g.drawString(t._1, t._2, t._3))
ylabels.map(t => g.drawString(t._1, t._2, t._3))
g.draw(path)
rects.map(g.draw(_))
}
}
 
val xs = List(0, 1, 2, 3, 4, 5, 6, 7, 8,to 9)
val ys: List[Double] = List(2.7, 2.8, 31.4, 38.1, 58.0, 76.2, 100.5, 130.0, 149.3, 180.0)
 
def top = new MainFrame {
Line 1,478 ⟶ 1,491:
contents = ui
}
 
}</lang>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.