View Full Version : Function editor
stuh505 10132005, 04:36 AM I'm wondering if anyone has any bright ideas on how to implement a function editor as a dailog control, where the user sees essentially quadrant 1, and a polynomial equation is graphed in it, where the user can click to add points in the equation. Is this impossible to do?


I'm wondering if anyone has any bright ideas on how to implement a function editor as a dailog control, where the user sees essentially quadrant 1, and a polynomial equation is graphed in it, where the user can click to add points in the equation. Is this impossible to do?
Why would it be impossible?
I would suggest starting with the basics, create a bitmap control to draw into placed in a dialog so you can use all mouse handlers, add the entry field, try to plot some simple functions, then expand from there and tell us what problems you have enountered.
stuh505
10182005, 03:25 AM
Finally got a chance to try this out, your idea worked great Bobo!
stuh505
10182005, 06:31 PM
In case anyone else would like to take advantage of this...
rollout graphEditor "Function Editor" width:220 height:339
(
bitmap graph "Bitmap" pos:[27,31] width:181 height:65
editText tymin "" pos:[26,94] width:28 height:19 text:"0"
editText tymax "" pos:[179,95] width:28 height:19 text:"1"
editText txmin "" pos:[1,76] width:28 height:19 text:"0"
editText txmax "" pos:[1,32] width:28 height:19 text:"10"
listbox lbpoly "Polynomial Points" pos:[0, 120]
local xmin = 0
local xmax = 10
local ymin = 0
local ymax = 1
local graphImage = bitmap 181 65 color:white
local polypoints = #()
local isDrawing = false
on tymin changed val do
ymin = (val as Integer)
on tymax changed val do
ymax = (val as Integer)
on txmin changed val do
xmin = (val as Integer)
on txmax changed val do
xmax = (val as Integer)
fn drawLine thebmp start end=
(
y=mx+b
m = (end.y  start.y)/(end.xstart.x)
b = end.y  m*end.x
for bmpx = start.x to end.x do
(
bmpy = (m*bmpx + b)
setPixels thebmp [bmpx,bmpy] #(black)
)
)
fn bmpToFuncPoint point=
(
x = point.x/graph.width * (xmaxxmin) + xmin
y = (graph.height  point.y)/graph.height * (ymaxymin) + ymin
return [x,y]
)
fn record pos=
(
setPixels graphImage pos #(black)
graph.bitmap = graphImage
)
fn estYFromGraph bmpx=
(
x = bmpx
found = false
sign = 1
count = 0
graphImage = graph.bitmap
while (found != true and count < 20) do
(
y = 0
while y < graph.height and found != true do
(
val = (getPixels graphImage [x,y] 1)[1]
if val==black then
found = true
else
y += 1
)
count += 1
sign *= 1
x += sign*count
)
if (found != true) then
y = graph.height
return y
)
on graphEditor lbuttondown pos do
(
isDrawing = true
polypoints=#()
record (posgraph.pos)
)
on graphEditor lbuttonup pos do
(
isDrawing = false
newbmp = bitmap 181 65 color:white
step = (graph.width/10)
lastpt = [0,(estYFromGraph 0)]
append polypoints (bmpToFuncPoint lastpt)
for bmpx = step to graph.width by step do
(
bmpy = estYFromGraph bmpx
drawLine newbmp lastpt [bmpx,bmpy]
lastpt = [bmpx,bmpy]
append polypoints (bmpToFuncPoint lastpt)
)
lbpoly.items=#()
for p in polypoints do
(
lbpoly.items = append lbpoly.items (p as string)
)
graphImage = bitmap 181 65 color:white
graph.bitmap = newbmp
)
on graphEditor mousemove pos do
if isDrawing do record (posgraph.pos)
)
createDialog graphEditor
prettyPixel
10182005, 07:05 PM
Thanks for the script :)
Are you trying to model mathematical functions ?
This could be useful: GeoGebra.
http://www.geogebra.at/index.php?=&lang=fr&lang=en
stuh505
10182005, 10:21 PM
If there is a variable that the user wishes to control, I could just give them a spinner for it...but that means the variable needs to remain constant.
I would rather give the user the ability to dynamically control a variable based on another variable (such as time, or something else)...by using an equation. In XFrog you can do this by entering equations, or by adding points to polynomial equations...in Maya as I recall they have something like this...but basically the point is to be able to quickly and easily describe a function without having to pick from a list of predefined functions. Here, all you do is set the axis and then quickly sketch, and it uses your sketch to create a complete stepfunction for it.
Currently I use my graphing calculator or mathematica or sometimes matlab, but this soft could come in handy too, thanks.
CGTalk Moderation
10182005, 10:21 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.