<%@ Language=VBScript %><% option explicit %> <% Response.Buffer = FALSE %> <% Response.ContentType = "image/svg+xml" %> <% '--- plan_an.asp --- DIM ScreenWidth, ScreenHeight DIM timeout, SID DIM msg '-- for errors DIM prey_values, prey1_values DIM pred_values, pred1_values, diag_values DIM pred_angles, pred1_angles DIM prey_dist 'distance covered per 0.1 time unit DIM pred_dist DIM keyTimes1, kT1, duration1 DIM aAngle(10), a_Pred, aA, a1, a2 DIM a_x(12), x_Prey, x_Pred, x_Diag, x1, x2 DIM a_y(12), y_Prey, y_Pred, y_Diag, y1, y2 DIM i1, Step1 DIM comma1, semiColon1, space1 DIM polyLine1 '' extend the timeout to allow for long files ' timeout = Server.ScriptTimeout '' Response.Write "Initial timeout=" & timeout & "
" ' Server.ScriptTimeout = 1200 ' SID = Request.Cookies("Humble")("SID") ScreenWidth = Request.Cookies("Humble")("ScreenWidth") ScreenHeight = Request.Cookies("Humble")("ScreenHeight") prey_dist = 120 pred_dist = 169.7 'SQRT( 120^2 + 120^2) comma1 = ", " semiColon1 = "; " space1 = " " prey_values = "" pred_values = "" pred_angles = "" diag_values = "" keyTimes1 = "" '"0;.1;.2;.3;.4;.5;.6;.7;.8;.9;1;" ' diag_values = "0,1200;120,1080;240,960;360,840;480,720;600,600;720,480;840,360;960,240;1080,120;1200,0;" y_Prey = 0 duration1 = "10s" polyLine1 = "" FOR i1 = 0 TO 14 IF i1=0 THEN '--- on entry, find direction to prey --- x_Prey = 0 'initial value: 0,0 x_Pred = 0 'initial value: 0,1200 y_Pred = 1200 a_Pred = 0 'x_Prey = x_Pred, y_Prey << y_Pred x_Diag = 0 y_Diag = 1200 prey_values = prey_values & x_Prey & comma1 & y_Prey & semiColon1 pred_values = pred_values & ROUND(x_Pred,1) & comma1 & ROUND(y_Pred,1) & semiColon1 polyLine1 = polyLine1 & ROUND(x_Pred,1) & space1 & ROUND(y_Pred,1) & comma1 pred_angles = pred_angles & ROUND(a_Pred,3) & semiColon1 diag_values = diag_values & x_Diag & comma1 & y_Diag & semiColon1 ' a_x(i1) = x1 ' a_y(i1) = y1 ' aAngle(i1) = a1 '--- on exit, changes in prey and predator locations --- x_Prey = x_Prey + 120 x_Pred = 0 'move toward initial x_Prey y_Pred = y_Pred - pred_dist x_Diag = x_Diag + 120 y_Diag = y_Diag - 120 ELSEIF y_Diag >= 120 THEN '--- on entry, find direction to prey from entry positions --- a_Pred = ATN( (x_Prey-x_Pred) / y_Pred) 'angle to position prey_values = prey_values & x_Prey & comma1 & 0 & semiColon1 pred_values = pred_values & ROUND(x_Pred,0) & comma1 & ROUND(y_Pred,0) & semiColon1 polyLine1 = polyLine1 & ROUND(x_Pred,1) & space1 & ROUND(y_Pred,1) & comma1 pred_angles = pred_angles & ROUND(a_Pred,3) & semiColon1 diag_values = diag_values & x_Diag & comma1 & y_Diag & semiColon1 '--- on exit, changes in prey and predator locations --- x_Prey = x_Prey + 120 x2 = SIN( a_Pred) * pred_dist y2 = COS( a_Pred) * pred_dist x_Pred = x_Pred + x2 'new value y_Pred = y_Pred - y2 x_Diag = x_Diag + 120 y_Diag = y_Diag - 120 Step1 = i1 ELSEIF x_Pred > x_Prey THEN EXIT FOR ELSEIF (y_Pred - y_Prey) < 10 THEN prey_values = prey_values & x_Prey & comma1 & 0 & semiColon1 pred_values = pred_values & ROUND(x_Pred,0) & comma1 & ROUND(y_Pred,0) & semiColon1 polyLine1 = polyLine1 & ROUND(x_Pred,1) & space1 & ROUND(y_Pred,1) & comma1 pred_angles = pred_angles & ROUND(a_Pred,3) & semiColon1 diag_values = diag_values & x_Diag & comma1 & y_Diag & semiColon1 x_Prey = x_Prey + 120 x_Pred = x_Pred + pred_dist 'new value Step1 = i1 ELSE '--- on entry, find direction to prey from entry positions --- a_Pred = ATN( (x_Prey-x_Pred) / y_Pred) 'angle to position prey_values = prey_values & x_Prey & comma1 & 0 & semiColon1 pred_values = pred_values & ROUND(x_Pred,0) & comma1 & ROUND(y_Pred,0) & semiColon1 polyLine1 = polyLine1 & ROUND(x_Pred,1) & space1 & ROUND(y_Pred,1) & comma1 pred_angles = pred_angles & ROUND(a_Pred,3) & semiColon1 diag_values = diag_values & x_Diag & comma1 & y_Diag & semiColon1 '--- on exit, changes in prey and predator locations --- x_Prey = x_Prey + 120 x2 = SIN( a_Pred) * pred_dist y2 = COS( a_Pred) * pred_dist x_Pred = x_Pred + x2 'new value y_Pred = y_Pred - y2 Step1 = i1 END IF NEXT keyTimes1 = keyTimes1 & 0 & semiColon1 FOR i1 = 1 TO Step1 keyTimes1 = keyTimes1 & ROUND(i1/Step1,3) & semiColon1 NEXT ' set it up for a graph bounding box of 2000 horizontal by 1000 vertical ' the viewBox has to be larger, to allow for left (and right?) parameter stuff ' the graph should have 20 by 10 internal dividers (grid pattern) %> <%'----------------------------------------------------------------------%> <%'------------------- title --------------------------------%> Predator chasing prey, using the shortest path based on prediction line of sight from the predator to the prey straight line from the predator to the predicted position of the prey <%'----------------- headings ------------------------------------%> Prey Predator <%'--------------- prey circle and lines with arrows ---------------------------%> <%'--------------- predator circle on diagonal line ---------------------------%> <%'--------- predator circle on direct chase, no lag, no prediction ---------------------------%> <%'------------------- diagonal line --------------------------%> <%'------------------- curved line for no prediction --------------------------%> <%'---------------------------------------------------------------------%> <% '' reset the timeout ' Server.ScriptTimeout = timeout Response.End '-----------------------------------------------------------%>