Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_ТП_Алексеев_220201_verson 1.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
480 Кб
Скачать

9.2 Листинг приложения на базе haXe/php Файл Main.Hx

package ;

import haxe.Timer;

import php.Lib;

import php.Web;

class Main

{

static function main()

{

Lib.print("

<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>П2. Haxe/PHP ABCE</title><style type='text/css'>

<!--

p { margin: 4px; }

form { margin: 0px;}

body {background-color: #FFFFFF;}

table { background-color: #F2F2F2; text-align: center;}

-->

</style></head><body><table width='640' border='1' align='center'cellspacing='0' cellpadding='0'><tr><td bgcolor='#C7C7C7'>П2. Haxe/PHP ABCE</td></tr><tr><td>

");

var params:Hash<Dynamic> = Web.getParams();

var Ax:Float = params.get("ax");

var Ay:Float = params.get("ay");

var Bx:Float = params.get("bx");

var By:Float = params.get("by");

var Cx:Float = params.get("cx");

var Cy:Float = By;

var Dx:Float = params.get("dx");

var Dy:Float = params.get("dy");

var Ex:Float = params.get("ex");

var Ey:Float = Ay;

var r_Cx:Float =Ex-Ax;

var u_By:Float = By-Ay;

var tests:Array<Bool> = [

((params.get("test1") == "on")?true:false),

((params.get("test2") == "on")?true:false),

((params.get("test3") == "on")?true:false),

((params.get("test4") == "on")?true:false),

((params.get("test5") == "on")?true:false)

];

var square_Rect = r_Cx * u_By;

var square = Math.round(Math_Square(Ax, Ay,Bx, By, Cx, Ex) * 1000) / 1000;

var soloma = Ax + Bx;

Lib.print("<table border='1' width='100%'>");

Lib.print("<tr><td>N</td><td>Математическая площадь</td> <td>Площадь (Монте-Карло)<td>Погрешность, %</td><td>Время, мс</td></td></tr>");

for (i in 0...tests.length)

if(tests[i])

{

var n:Int = cast 1000 * Math.pow(10, i);

Lib.print("<tr bgcolor='#ffffff'>");

Lib.print("<td>" + n + "</td>");

Lib.print("<td>" + square + "</td>");

var start_time = Timer.stamp();

var square_monte_carlo = MonteKarlo_Square(n, Ax,Ay,Bx, By, Cx,Ex);

var delta_time = Timer.stamp() - start_time;

Lib.print("<td>" + square_monte_carlo + "</td>");

Lib.print("<td>" + Math.round((Math.abs(square / square_monte_carlo - 1) * 100)*1000)/1000 + "</td>");

Lib.print("<td>" + Math.round(delta_time*1000) + "</td>");

Lib.print("</tr>");

}

Lib.print("</table>");

Lib.print("

<form id='form1' name='form1' action='index.html'>To return, click <input type='submit' value='Назад' /></form></td></tr></table></body></html>

");

}

static function Math_Square(x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, x4:Float)

{

return Math.abs(((x4-x1) + (x3 - x2)) / 2) * (y2-y1);

}

static function getCurve(x1:Float,y1:Float,x2:Float,y2:Float,x3:Float)

{

var k:Float = (y2-y1)/(x2-x1);

var b:Float = y1-k*x1;

var y:Float = k*x3+b;

return y;

}

static function MonteKarlo_Square(n:Int, x1:Float, y1:Float, x2:Float, y2:Float, x3:Float,x4:Float)

{

//Count of hits

var points = 0;

var xMax = Math.max(Math.max(x1, x2),Math.max(x3,x4));

var xMin = Math.min(Math.min(x1, x2),Math.min(x3,x4));

var yMax = Math.max(y1, y2);

var yMin = Math.min(y1, y2);

var y3 = y2;

var y4 = y1;

var r_Cx:Float =xMax-xMin;

var u_By:Float = yMax-yMin;

var square_Rect = r_Cx * u_By;

var newy:Float = 0;

var randx:Float = 0; //init random variables

var randy:Float = 0;

var test = 0;

for (i in 0...n)

{

randx = Math.random() * (xMax - xMin) + xMin;

randy = Math.random() * (yMax - yMin) + yMin;

if(x3<x4) //esli c<e(slychai 1)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

if(randx==x2)

{

points+=1;

}

if(randx==x3)

{

points+=1;

}

if(randx>x2&&randx<x3)

{

points+=1;

}

if(randx>x3)

{

newy= getCurve(x3,y3,x4,y4,randx);

if(randy>=newy)

{

points+=1;

}

}

}

if(x3==x4) //esli c==e(slychai 2)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

if(randx>=x2&&randx<=x3)

{

points+=1;

}

}

if(x3>x4) //esli c>e(slychai 3)

{

if(randx<x2)

{

newy = getCurve(x1,y1,x2,y2,randx);

if(randy<=newy)

{

points+=1;

}

}

if(randx==x2)

{

points+=1;

}

if(randx==x3)

{

points+=1;

}

if(randx==x4)

{

points+=1;

}

if(randx>x2&&randx<x4)

{

points+=1;

}

if(randx>x4&&randx<x3)

{

newy = getCurve(x3,y3,x4,y4,randx);

if(randy>=newy)

{

points+=1;

}

}

}

}

return points*square_Rect/n;

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]