TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlFaQz9bQFpJX2NVcT5sS1pgTlxcQE5kXFxRZ3F4SGlKRFFrXFxhc115VUlcXHM6WE5JQEpETG5aQUpTZFJKRExTXFxqSlxca1pATWpdU2xQTXFEdEd4d0dtU15sdl5VcFVoU05hbXJYbWpIc3RIWWdtTWVJc0NETEltUGtEVG1xWUpgVnM9S2RMTl5ETTxhTjtBTVhNblNcXFJObUo7ZG1LRFJASG11aHlpcXFvdW5oZXV4bXVVeXhvVHh5SXJ3ZFFxWHF0UHF0UG9lcXhxaVR3dXVRbVREcVJCRE4+QEw8PUtbXFxuOk1XUmVKPkBMPEM8TE9RXFxqSkxCOjo6XmpEaVpbXmpKOjo6OjpCTm1HQkNGPj88Ojo6OkJec0dAa2R1P0JRbVVzZVZQeXhAb2JDS1hJaUl5WVRvaUR1T1dvUVdzcXRsZ1ZTd3dla1RmP3NlY1NZXWlpcWk8eVJ5S3lJUWhhdVNVPVd0W0lNQVZgVXRGRWlfcXZVR3llV1JSeVdDQ0Y+P1RzP0dAc3V3d3l4YWV3RVQ+Z0hMbUVwd3dSSUZnZVdoVXlGT0VzS1RgdXNYZ3NERWM6T1lgR2h3aXJJeVloU3hRW0dKd1l3QXVBQVVrW3dJW0ddQ0Y+P0Rkc0RDTXhBcXR5S1loeXV2R1ltc1U8Z0RCUWdPVWdeSXhvWXdXd2lrS0VJcUhEeUNOSVZVeXVUUXk+YUNXU3k9ZVZxeUJwSVU8PUNbY3lERWlKeVZjO0hUV2dYTWJVc0hnTXZFPWROZUQ7VWhLO1RQR3hGVWdhWVV3U3lZZXlUeXRyU2I7PUNbWzpASjx0bDxUTmRVVGBgU0NBS1k9TU9pd0lcXFBZbVlzWHhbaVFvaVdaQE9dWXRWYXVmdG12WHhIYXN4XVFpQVloSVVZXWp3cWxKTFJEdE5vWW5DUU5BeVVLVHdAaXk/dXFQeWx5RXFDWVh5aXdRZXNtbXB5eHVveFNYQHVQWE9JcVNSZFFMbXV1cXRjZE5lWExtYG1fQHF4RXVOWEtGYHZgbVduTXY+dHY/cW5WTEtjeVhLRW1GYE1zTGxPQGRgYG1tb2t2P3dwWHVsYF1hd2RnYGU/R25IQHBJUVxcPE9uQ3ZzdXB3UUZnc1hyc1lxTk5abkZ4YXFvWXZvcWlhQGZaXVl0eWZpVm90eWZ4cWBtXVdbYGhjZkZtbEdaP3ZyZnZmY25vWW9wSl9wdGF3PmlibWFlZ3ZjP2d0a19qaGh0ZUh5XlFseHZaTkZbd0lhYVBeR0dyV0BcXEx5bGJncHl5X0l3eWNwcFB4aEx5XFxwQHVBcWxucW1xYHVsd2E7X2F5QWhpUG5rYXdJP2VXYW5cXEZfVWFzP3BfTkdfeVFbPlB3Tld5cXhnWXFdY19iUUdfW05pXl5cXF9XdmhgXFxSXnNGYGJraGdJT2BpQG9aUW1ycHU7WWJBUGJpeXRmVmtkWHBiSHZHZ3FIeXJ3YVpTcHZaTnVGd2ZBd2pNb3E9b3hBYXNJVnlLb3lbWHJASGFdVnhrd3dDR2pCSWZCeWVpeGZCdmdLd3dHd2RAZ3hlT2lfWVttYV5Pb3RsP255dnZkYGtbd3hDWHk9d21KeXddTmtDZ2ROUWljb3FcXEh1cXZfXmh0PXhfXll1QU5bY1dmeVh5alFvUUBhZ1l3UXleaj52W2l2cWluQXdlbFl3SW5jWFZcXGBeZk9IYnluZlBZcGR4XFxaaWRpSGh1aWd4ZmlwYF13cXBUUHlmRl5LaWhFVmVDP2dkT3BxWHBuaG9yUGM9aW9jcGU/T1p1dmN5eGNeaXJfcW9MTnRURmB5aWllYWJUbnVfV1tLd3FQRmloZ25CYW5xUXBIWV9GaHBVcXheX2NdUHZqWWxZcWdxb3BnZ3dBYF1NaW5reW5GVmxxYG13b2JIT2FGcWJiQW9uPmB5T2BHb212cHNJTnF4bm9nYXlocVxcYk9hT29cXF9RYnlHb2JZbnJYZGd5bF95X0x5aT1xXXdeYzpIdF1XcGVAY2I+aExodFd2Zk9QXj1oaWlxcXRRZ1l5bFhPbHNHXz9mXkRAZl1YbUJhWndAdHdxdE4/ZFtpY1tvZ014d3NBcVk+bWFBaT93X2RHZ2NHaGx5eHR2d2hZcWlxc3Z3Ync/dl95XWFxbU5AXlt5bHk+cmtAcHRwWnRpYE9neXk+eDpZanN2eGZwd3FgbVtBZmFhc1NYbG93c2BEQEVXdWNpV3FXdUF4Z21pPHdkUVVVcmV2QV9YYG1VYlVTd2djXXF4O19GVUFpUmN3VWt0YTt4dTtWUGlXVnF5Wj9IRVFjcD94dGlZa1NzVndTeWdzYV9jX0F3cWd0TnlWQ0NjRldmSl1Ha2VkQXNSWz1XRFVHVkt2aHlXdHdId3dXQ1dnTl1IQ3VnXFxFYmdpZ1VdWW1vU2dpVV9xeWtLWHQ/c2VTST9teGhfVnd1eDs7Zk47UltDeG1DZnQ9eU11dF9taWlLeWl3YmxPdFtBeVV5ZnBbVlNvSVd1eUdDZEdTU2lFWE5TQ01FRGtZaXh3ZEN3dHdVd2FLc0FzRFY9ZFFPZEttRG0/R0ZfSGQ7SERXZ2pzUkRjWGF3d2I7WXdfZ289eDxZeFRVVV0/dXNlRERdZD9RdVZDdkp5ck5fR0RJeXJrY25lZj55UzpFR25vZ3F5d1l5d0JDVDt1eEZvaGdjVHVJZVJPYzo9VDpTYmpvaD1JSFdJU3Y/ZGFFQ3V5ZHdVWFM9ZlxcRVZwV1NSR3lcXEVIVEFJZFV5QGNkZ0tXWT9jTXVoa3Vld0FmWXlkeHF0aVVHd3dzTEtEVUVyQkFXRlNzb1dCRVl0dXlkdXdFTUVoYk1TeV15UllpQGl1SG9ZRT9zY3lkck9DQWtWajtTP0lCW291RUVVallEZml5TFFWeVtERHNJal11RUVQeXVLSmxQbUV2YUBVYmBxaXh5QHlzbVRQZERYYlRzRmlqeFFUP2FXP3BLQFVLT1lLYFVtZ2BqPmVLQ1VrbV10c015QkhNPlxcS0Zwd2NZTmQ9TXNsS1RQVklYbFFFcFFdVUBQbF14cWpleGxBcnZJUklYVklkSj1hTWtdUlNodHNBb1VVdHZpUlFcXExKcEtjaXhdcVN1QXVRYUpqZGtLWXhMaUw9VXBXVHI6aVhuRUo/RHlXQVg9aXhTbXZiTXlibE5McWtTVFBgTGxzcGpEeUxdZG10SFE/SE9ORHZ4TXNvUFZwcHlWeEpDRFh0ZVldcFlgeG15VFJkTVdmRFliSW5BUHBoaU5ESFdPUExQRXhGRHd3PXJ2bUpuRW5QZFhiWG1CRG1vPXdvYXNPVHFHWG5weG9ZWHB2cFVpcFZZUHhEeVJJRE1WZHB5PHZ4TGo+RFd3dFlWeUpKaVlyTEtjeXA/UXdtaGxKcW5fYXdtYGo+XXRmTFlhXU9WSW9CcHVTTEtBRWtSaHRlQFNSUGs/WG5xXXNMYXNhYEtaeVdrPHBYXW9LWXBfZHR3XXNQTEpoaUxzbXd5YVVtRE89YHRddVBzVFVlUWxpSVNkVXZBaFVNTG9OdWtCSU9tXFxSYHhZVl1va1h4TVhTeVlwRVxcbUJkU2xxdnk9TGVteGFZWU1hWHZUV1lZdExVeUF1SztcXFlmRGxLVHQ+bVZYaU5QSW9RTE1zZXVScHNlWXlMUHl3aXdcXGRXcHVteUR4dGhZZ1VxTG1WeG1yeHh1RWRRZVhOb3hYb2hteXlZQmBYVHl0c2R3XFxEcFhxeW10d25FS1BoUEQ8TER5bVJQdUpET2dsVmZcXFhqVExbUHhKWXhFTHZoWVdQXFx2YjxLZGFtakhtRXRPYXVXbVFtcWlveVlUZkl1RVBsZXRMYGFXPkhvdjx3cEF3W3VPTHRPTVlOTWFRQmVqUl1xbFFzZVRZWT1scEBSaE1PUURYbFF0P3hvXFx1b089bmVMVmBATD5YWTp5Sl10dWRgUWBAbENEUmBUVHh1S3VQWV5oalNta3Rwa2NZd1xcUHJiUHdEeGx4bVd4QFJqWXQ/XFxMTWFwPWVVUXVvZUFRS2hsdmBTbFxcdHFlVWJUbz5cXHlESW5FZFRFdWx4bVJkeVNYTE5XaVFjdHZtZXVvdXRzTFJVUFBnRGtcXEB3ZGRyXFxMZ0NQbHBgZWdfZUJXeWRpZnFZc0F3b1VndT5XYENweVpwb1leZnBeZEJ3cWduZFlob15xYF9eblxcP3NyUWViZms7QW1bQFxcR0dual5cXEVwZHVXdV5ZdnVHbHQ+cD9fdkdYanB3cm1nZlNWZ2ZpckxQXWpPbGVgZXJPX1xcVmc+b2JJaWxOUWtzT15XVnE/b1pZUF9MWWhWX253aGJeZ3VvTmx0QHlVUWZvXnFtQHBucXA8SWx0aXQ/UV5peHFacXd1Pnled2dzd2V4WWxXSXlHcGlZcXl1RmxPeXdOYHRcXHhlRGhgYG9ncFB0PmBxUGdgRWBxZmhfaGBpWnlbXFxWZ2ZheGlBZWFudEJZeGxYd113eElmYnh3bFhocGdYXVtOeExxYnFgX3hnaEtgZFNXXlxcT19HbmVyZ3NoX2lwaWFtaUZRWEFtc3hdc1g7eUM7eXFzVXZjdFFhZ2Q7V2BRckVFeGpRaXhreUBNdXJreVVjRnFTY1RxZlNfUmNxeVBrVV1HV2t1VV5rc0JzZUlZU2ZpdWNJZHZTVFp1c2FzR3ddeGlLU1hFeVxcV2U6O2Z2a1k8R0I+d0N3XVZJdVJ5cXdxdUlkS1VRO0dPUUVdS1lVUXJoZ3VJY3lSa3M7YVdHPUVSY3luWWdlT1NTY3hOeWVbc2lLS1Z3cVlAX0NXS3d2aVlsSVM9X1ZqZVVnX1hXP3dLZ2JFc0RgZXhbP2h0R2NNdUdrTXR0RWVpS2ZmQ1RVQVVRO1RdX2hrTWRnWXdVeWZGb2lMY3ZzV2M9PXR3W1RkdWlnb2RwY0ZeX2duY1djaVRmS1VHY1I8XUlOW2Ngb3VnV2ZSXXVVO0hlRUJAaUdkaXVBd2lnZUJaY3h2UVVpWVhaO0Y9RVRyeG9CaHhYeW4+UXFwdWxCYW1pRHFBQVB1RFRiTXlRdE1RRFlvdW5CSXF5YU5sbXlXTE5hXVVkSFNReVlpcVdJWXlyQHNvWXlWQXBzWFh4QG13XXNGWUtEaHJWeW9FQHZ0eFRvYHhYVHlFeXRtVXRlZHI8TFNJaXBweXdFUXJZRHFfRXJmYGpRRFNQaFA8RFRGTW5ERVJKYXM/XFxsQkBPdVFqcHlURlBYW3hxbmRxPlxcT21tTl1sU0JNdVpEamdMazpdVGZgcUxAb2V0T2FVV2lEdl1QTUBtaERXZEpIa1Rua2NRWm5ebU9XcmJZW1tOYm93cV4+W0toYXdGX2NoXWJxY25uW1I+ZF1WWmRfX2F3bUg/ZVdhY0NIZkBWZGJnXWRpZkNWZ11XaFpIXmZxYURndHhAX01QeV5mY29OYWB2XFxtaGNjQW9HT3lIZm9oUGpbYWdNcXlQbml4YFxcVFBmW0F3WT5kZj5gbUlcXGJgZWZuc1BvXzp4dWZpWlJgeXhHcEhRcVtWeE9RYXVxZnFOck53c1VObFRJeVdQck15ZWp5d1xcZ3N2eWBrQGZ0ZmZ5P2ptcFxcQUlrXU5eXVltP1Fta3dqUmdgPVZ0c2d1XFx3cUJwbFJJW3RoXm9oeXhgdXZwZnZPY2ZwcnFJa093YFZfb1tweGl5cnV2XW13eFk+c3BPaElneW9ZbWh5XWFndVJIbUdHcEh3ZVpOYHdZXFw7aWNNYGZTZ2FKb14/R2RxWW9dT3lBTmJ2XnNKUG48WGhIX2hXQHh3bl1hb3A7PnZUSWhoeHdBR3NHUW5uR3ZRbmhZcWlpZm5ySF5jR2JSaFtrX115b2tqSHRsYGl3V2JESF9CRmlLXm5OYGxFZmF0TlxcPGFjQEhqbk5vaFhyXFxWXz9HZ3VQZzp3XUNwZ2ZfZ25fY1tQZ3RPcWdpZ3FYYWQ+bFBvX0ZBcHBIYkZQa1tebGFZZkl4ZWRwYGhecGZHZGNuZFlJa1xcYG9ueXJ4V2NCd3VaSF9nWWY7RmpyR2l0Tl9OQHl1TmdhaFxcRnBuVWdeZ09kX1lcXGdOd09od0hIdUxoZHFeZE1vX0xRa0BZaHlIXFxzV3dRaXFJWW1weV9zWHlYYXl4RlxcZkhsO0B3TVdseUlwamB4XXlcXGFxbll5eEJPZUtHeTpvd2tIY1FRcXhQXmlub3FoanF5W2B3XVVAaW9vdFFXZz5hZENHZW9ub3M+ZVBveWVRdHNnZU1ocVlOa0pZbHlpd1lhYENvbG9GWlo+eWVAY0pPZ292Z3I+ZEFJWm1eXkFZcXRgaUl4YkNwXFxfb3ZRYFpfZmRoXnNTP1t5SGxpZmVaT2ttZnVZbl5aeV5zUXBlZnJFWGBIYV8+R148QWtoT29QT2c7SWFEQV9ucG1gYGRgV2VfcWJpV2lmeGJKaXVXWWxtVmRLZ19ESWRfdnBrXmk9TmNnPnNBSG0+SXBZUVxcTGd3dGliTXhuPEZ2Q3B2VEh2Umlib1Blc25bV0ltS1h4a1lrXmZodlhgdWF5a3ZnT0Z1eVllQ2dxckhya1lyQlFmUlduUmd4WEZyX25iV3h3aHdbaVdfZmZxUk9mR3ZhRVliS05jVUhiVG5pTG5bXU50PVhiaXB3RHF1eT5makBlPW9yYXFuaWhwT0hvXXlvYHd3PUhpTXhieHF0Q1duX2ZobGhtQUlsd3BdT2ZtWkdldz9iQj9lTT9hUUduXFxXaj5waG1ecWZfZWRRZ2VXWk8+bXJAaUdhcFpnc0dQa09vX3B4anJZZWJeeG9xX05ocWhPXFxFPl9fRnlsWHdFdl9IV2B0aWRzXlphQV9dQHRgWXhKeXVyP3g7eVp3d2tjcW5tZ2xuTmFWR3NnX1t1cWlfWV9fUG5dZ3JTX2tMaHlwTmVVUG54RndCaGN0SW9wR2xQX11QYGZlPlxcZ3BhQ2dsY19cXGA/YGhpcW92YEdQYENQYl5fXnZfcTpIZ05Ib1ZfW2xxXT4+cGR3anJYYDxubkpxbUpPaXNOdWhxZ3lfYVNfaUFgckhocVZYbz4/aVlnYXF3dGtxW3V3WF1nO3dGX3FFVVt4YHNXX1FGQ1FodEFiP3d2WjtlQUlUTktmZldVS0tHQnl0dFljbElYYW1HWFt5Qml0bD95dklDbG9WZVVVO01TREVTT1dDV0l5cztXbnFzVkdiOmdpaHNUYWVTSD9ob1tJQkVXQ1NITUdjTENlY09lT191TFVCdXFZd0tyVE9Dd2NjdG1IPVVnbHd1TEtSXFxZZHBzYkRhc0I9Y3FdaGJvZmZpV01paVI9VklZUnM/WWNVUnJpRltfVWJzRl5lUkc9YkJ3YmpTaG9jSD9nZnFfWVZxWHV3Y3RXdXRHdj9NZ1k9R1ZrSWQ/cjpHUnhzZk5XZ2ZPRGI7eVVPY0JrRGdXY0VNZHhzRFJHZnJbWHJBaEFHWVBpdGtPcktxZEZFaWpjZVhHSFxcUVdAbUhsWWJrZ3NFc0JIXXR0XXN1ZUJcXD9XY0lGZ0NDY3lDOmFERFlTUnVUZT9VZWdIW0tzd1lpPXFZRT1TT0d4PHlnP21VVk1GU1V3VV1iRkFVclN1dWVUdGFXX1FGT3FoPGl5XUd4dEVoYHFZT1lVaHl5P2FXS3d0cEFTZGd5SUN1ZU1SUldIR0tHd1lFQWd1eVtzS2F5ckd3d0FiWm91d3FiVWNXZD9FTmlDTUNJcD1STGVVaUdJbU9HU3l4SklEbXNnXlFzZGlWdFtiUz1DRkFXPklzXWtTXm1GRmFYXkN3bUV2VlVJYEdDTkVVT1RNcWRXRElZQ3hSP1hUZGlqW21vbllXRGxTVmV4cGB4PklYSGhxZXFvdVBOX0lLWWFLTGRNRkFWWll2XzxyZUh1Rlxcd2l0bG1lUHVpT1tkVEJJd2lRcHlscDxAcHZFWWpRV1VRcWNcXGxdQFZeaHF0WFFxQHV5bHZUXXJiZFZMZGpiPVN4XW1rRW1CcXNpVXFteEx0UFhrPXlpUGxkSXdMVG9AQXBDeXV5WVVxVXlgVHJcXFxcTmhNWXlsandIdUNUT1VQWW91bFJVcklxc09tVFphTXhcXFg8bVVFXFx0c1xca3J0dG9NcEBdTGNkb1hNVHBQbEpkdHlMblJlVm9keWU8blJdcG94TElhVlN0dGR4b2lteHdsTW5UWGtseU5QdkNhS19UVGhMS29EdWp0VEhwT05gblZQT01wc2VAdTxMU0pRcldlblxcTHNkYXQ7dXZwaUpcXEFRQXFUXFxIa0h1VWRVVm55SnY9UHVQazs9THdtUDp0eDpoSnJ0VGZAVTtxWUVxWUU9U25cXHhTVGs6QE9LbW94RGxYSHBSbVd5RXFvaFBhbXY8SWVWPl1VZmJzQHlHQHNmaG5TeXJYcGladmA8WXRNd3hyWHVrb11LWWxcXHFucVFaX2dyVGhcXHV2eVFxaTtoaVtWZVJ3aWxZX1xcVmV5YGZlZlpRQGtmXnlbb2lvWWF4UWhRR3FSaXhXYWdfWGdxeVtcXHl2T193bHBuT15rYmBpdHluSXhySHl5eGlbVWFhV0ZzOz90RmlqUVB2W3lcXEBwcFxcd2RicXRZT2NqP28+X3d4WWpBcFtzRnZrZnRQYVpgSVtEQGFbRmd3QWNMSXZvUF08V188P2VMWXd3YHQ8TlxcQ3B0WU5jT05lT0BjYlBcXEF4a1Roc0ppaVc/ZjxnZGRocFJec3hXeT94X3hHbHh2Zj5gZEdQZltnZmM+XFxEYV5ESXRtPlxcP05zUF9eVFdlUUBhO0huVnZdRT5fUE5jO0FweWZtYXdpSm9qYHhmaE5kUkhgYlF3TkZdb0dqUmdoeFluRnF0U3ZsRE9beD9bQW94RE93WllsXFxna1Rwb3dBbnZPZExjS0tWRz1pRE1UYWtVUUN5O01JTDt0WkdkXFxlU3hncl15QmJrVnR1Z2xhc3JXVEx1WXNRZ2c7aHl1UkxleF1hclRveEtzeHg9SEU7aG9jaWJzdV55eGFpVT9xZGdfeV5veXZJWWFbSGhNV1F5eD5RSXVxRkNFUjs9dXZ1VnZhaUxrR2VHZ0I9VnA9QltrVndhYnVVTHJtUUtVbjxgbXlYcnZtT2hxcWBFUlBJeVh1dEFYbHFdVURNblY9bU15eEdpc0dJbFhtbHRBU1NNTEhRb0NNUXZwVFRYeGZcXGpZZFRgXFxvVlhrdGl1UERQdHRUc0RrbHBSQkVvPW1XUFBScl1QP1B1XlB5UWVOdHFOT1VWVVRuWGRYWXBqTG14cVVwWXFUXFxQVktkbkdFV3BoUnR5TnFwdkhhVW5wbk9Ua1FscEJxcU1xdVtkU215TW1YbHdBcnhxUU1NUUhRWU5tam9weUpdVmZ5b2Zhanl1Tj11UWtFVmlRT1dZWV08bT5FT2pUWWt4V2dYV1Rkbk5Yazt5bnRYdWFsbEJNS2VcXFdhUHF1ZWpkWVd2bFltVXZgeEs8VE9gdVFsZW9CeW14dE5jVHk9QHdIRW12cXN0SFNmZFlfSHh2PVJ4WW9odExjRXFXTVRnWFNXaWpqQVR4UXlNaVJIZFdnRFNTZXFcXFRSVz1ZYEF4Zlh2YWh0VUVqbXRMaj12cFRuP2VyT01QRmVKO0RZdm14d1R4V3hxa1RYS1xcTDtRd3Bnc21vcGV3cGdJeEdWblV2aFBRXkpHcTo/eVFxc0h2Z2FQXFx5VnVod3FRQG5jQXFXZnhfR29peGhbaVxcTHB4WkhgdT9cXEFhaGRfc1Jgd1Jvc0Nvdl9pbFl4XFxBVlxcVmh5Smljc15kdWhqZ3BqWF9bXFxgdU1fdW9OYlxccV9YaWRjQXd4eWJ4T2NZb3Q8T2w7Rm5SSHhWUG9LbmhWWFxcXmBlPklpWFFbR1dlRnFgaF5uWUFia1hqWl9rZUlyVmZfYnBxalBuc3BdbHBgY05yZFlqd3FgeT50SV95allpUUhcXExgYVk+XFxTSGZ5P15VcHNKcHVnb2ZKR2dZaHlpcHV4cWs/V3V0X3dJcVtxRnJtQXVuYGZfaG1wYXNpZlo7cWRxaF1YZl9BX2s7R19NWGRJX2BEYVpTV19Bd2h4YWRYUHdUP19qQVxcYlF3ZFFseXZgeHdlYGZxamlmc1d0ZWdfTFlgWj9rbm90SVdsYXFjd0Fqbkddc2l2V3B1cWBlb1Fgckh2WEZdcVF4PU5gbkF3cEZwdG9rRUlwdFhgX2hpPmlcXGxRaEdpdlRnaT52dm9HckNYXFxIQG50SHVdQXVDWXZ4dl9HZndFaW54aWthZ3ZCSWNNaGZ1V3JRX25rSXl5YXBJXnNLaHVLVnhJWGVQZ11CbnVZVm1zTmRYUGFwXmRgaFtoYWxUeGRwSWN1WV9cXFZfaE9nRGF3ZXdpW0lpU050az9zSz9aamllZ3lkcVl0aj50R3dxeXd5eEdhal5xS0lhYEFlbkFnc1FmVUFgalh0bXBbVnh2PnFjPUh1P2hxZ1ZvX1hpXFxhd0ZHZXB2Z1h5XkFod1lFX11SU2VpaHdDYHllWFVXaVlYTUFiO3NZVWFlQ3lWTkFzVGFnbj9keVlmQkF4PWN5eF1mTV9FZ1NIV09EXU9mQXFpQUNWW0NXS0FJO3VHWGNpVkNWRFdSSm1VYGlJX0N3RUt2YTtWQElGaEFTckVnR11pbkVmR1N1alNYTWNVa01lTGV2YFtScm1DXW9iXm1Ubmdob2dSZHljT19mcmVUZFVFPT1jSE9nRmdUdFt3cUd0QHNoQkNnVG1WeVhwc3RQVE1WdVlwTkxXRVh4UU1XYUBTZ2VXZ01VWDx5Q21OT0FvbnlyXmxXdEVtd3hVZFF0UV9lYFhnbXZ1QGBueVZsXFxhdm9WeVNgY0hvdXNZcWBWYz1nZFRIdXlQc0d3bV5HZUdYYFZGXUpZdlJXcEl5eGBBXUd5d3Nvc3RodXNGd0BfY3R2Y1RIZnhhXFxqVnJKZnZ0aXFBcXY/UHNrRmZ5eHBvZnJQX19GaWRzWHZGYHJTUGJsP2ViUXVaWHZKX2NcXEFfckZic0d3TWl5P2FgcU5UT2JNRVdOT0lQWXNdV0NVR1I8P1NjZ1N2X1NfXXN2bVI8b2NPU1NLV0dPU3N4R2lmU3d1d2VqVWdxZ3lwQUJNR0Z3QVVOZ1RNV3l1VUVJPWVqQ3JtPWJaW1c6R2ZOb1Y/X3dxX2JKS1J2P2JTY0RgRUdqU0Q8Z0d4Q3lmT3JXPUNKSUQ8b1ZEV1hOV2NeZ0RFc0c7QUdoV3hkb3lMdUNNa0JqXXVFcXNRU1R0S2ltbVZOY0JhQ3N2T3hfbXNWR0l4T1NHbXRFX1lfUUdJUXhiUXJgd1V2W1lyUVdOV0ZOeUdWT3lPc3VUbWhGQGxcXGh1VXBZSGVQO3BZP1BZQFBqYnh0b3lqaFVxR3l4VmRVY0FSVUlZR3VqXFx1bVhxb2BZeExtV2REcEdoc1l5cFp0cTpQVG9ZeFo8dWlFS1tGZDp5eTt2XXJRY2J4cUVJYlJQaktoZlBmZEZWcU5XaG5nX2hIc0hwd3FHdnZgcDxfaVs+Xko+Zm54Yz9XbjxBd11wX15ecmtmakpHaWNIX3dRYmxRc3FIeGpRZlBPWkBub0dIXU9wdmVObW1mdmtWdm1Zd19JYEdRc0pudUxmeEN2XUtmeVZneVQ+eUhQYUBoc1k/ZFVHXldOeE1fcldndFJuXk9OcVphWjtZXV9BZG9nW19gdE5eb0o+W1pQZDtHZV1hX2JvakpRbltXbnNQaXVAXmxPbVh3YWBZcGJhXWVAYG1AbGpwYHB2d1tgZGdfZ3BJX3d4a3VpYXVHZndhcUpxeVpYallxX3dReUNneFVhXkRBZWNoZ0Q/W1tebm5gWmNhWz9na1BmZnRJYV5ZZlQ/aktBZXdpZk9eXFxMcFxcXUZyUmZjRU5cXG5BeDxnazxPbHNnXFxkPm47R2JNaV1VaXlAX1tHaXJQQV5yPnd4V11kR2ZqZl1WdmBpSGp2SXBZYVxcdl5zcEB0bVFzQUlzUE5acHBtWT9kV1deZ3dla0hvSFBxYEdqU3FfeGd4XVB1alBkaWlwTFF1ck5nd1B5b1lvXFxneEFQZm5ZdVxcX2xreHFwWWU8P1tbRnRiSF9gb3Z0eG09PnNBSXZOYWlrZlpTSV09R3c6WXNGWVt2YGhbXl4+Z11jWGNsdm88R3JERnI7b24/RmJfSVt0dlxcYUlvT3lqXUBfRD9nRXZxdEZzQT5bUkFfcT9sTElvaGlvVGhdaWd0dz9uaEFwUEFjVlhpOz9lW0FucHhya1BoZ0BeV2dzZ19dUHluTkdxSnFleGd5dkZ3eEFmUHhfYk5sUl90eFdlRlBgcHlueEM8PUNDd2NPT2hLdVVaVXJXZVNlR0I9YUM6dUU/eXRRQ2M9SUhGUVg6eXc6a3Y7RVZxaURfc0c6U2Q/T1hQSWRYbWRyY3Y7YUdMW2R3Y3ZaS3dxbWVsXXI+V3ZlRUdBXUVvQURbP0ZkVWlveURKdUlSQ1dQZVdJU0hOT1dtTWRnX3Rwa0h1YVRfY3RnU3lnQ0Y+P2REZVlhV3l3cXRxSVVfUWZWR1lLS1JCQ0Y+P0RMeUVPV2NUa1RJQ0Y+P0Q8PUNbW0ZDO2dWPUQ8PUNbW1pDX2o7YG88TmJCRj5Eb0BsVGhgVWN0VFZFWD91bXd4cW9Zd1FZc2V5b3lwTz10SkhcXGw/VWtQZFRfaXBiYFVKTFJCUkJDR21TRXBbV0pnQl9LVXJdaFJ3dFxcR1VOQ0Y+P1xcPmBsU1heQW9rbklrZWdkb2FzP25kXWhtWUBsUGlsXm9lPkBcXDxLTHhRSXBRdEFfcF93UmB0UXl0QW5ralh5X1hpXFxJa2Fedmd3Z3VXbWZoZXVwZHRYcXVodmxhaEJIaGZ5d2Zhd05IYj1wWkNRcj9YW11ndm9IaF1xYmNBd2JBbDtZakFWc194bFhPd1ZWdW5IZ01gbWxPc2NOYHNPeF5hY3R5ZlhIaUBvZXRHd19GbXF2Z1hfdnVHZW1wZkdAXjpYX3BAZkxhbkNPeG5ZdElXYWA+ZmRhaV9vW0BAeGNZeXBpd01wbVhwXVNuYXY/cW1AZmRQXmJBZXh2dER5amRwWz9XY0JGXj5APG9paT9XYkNWeDtzYVFyRnVIaF11ckNleGNZdG12dUFla1NWXkdnY0dzc3F5ZlloSVFzWGlpdWVWeGF5c0lkbFFJZ2FoTWFWYGFzU29zcWl1dXdYdUtCdk9JcWV1dGdYbEV1X3Vkc21lVVtkaUdjc3VXcnFJdF14YkVlb1NXUG1WWUtzd1dWQXFDU11pckVoRjtFajtScGV3VGl2YlNTcndnWldWc2FVZTtDQE9mX1tiSktKPE1vRDxLRUFNQ3hyQk1ZeER3TlBWW0B0P2BXRnB0dUVtQER5X2luTlRLSkF1UkFtb213Q1hMYUxwTHFYb2VYX2lZaWxOYEBwSWRqYm13VklxSFB4OjxuOmVNdjxZalxceFJtUVFRc1FMUW5VTDw9S1tcXFpPVlpAd3VbXms9YXRiP3VqSGY/dm5FT3hUcGVWSGlgSW1MUXRMUXZSQF5nR3VsaGJUTl1UTmtMb2I6QHdIV2VxcGdHUXVRd2RRd1xcdF9vTkBkc0BePjxIbmdob0dtT3RAd1xcdFJSdFF0XXhiRXJjUWx2cG5RVFRhcFNvXXNEQFJ1VVl1bXRGPFJMaFY+ZHBvaHB4cFlVRFJBUVNDZHNcXEBLW1xcakpMUkJlcjpoWFE8dmU8WHZBeWtFdW14VklFcmNRPHljS1VmQGVWdnFEXFxvdkVfeERFR0NPc1JJaF1VWEhJYnNnVFJJaHZtZ093WFdNeEtrRj4/RDxeZEQ+aEhwaXJJdkFobXlIcHJYdTtYWkFOW0R3bF5pYHdBakNfXFw+eGhNeWdbRnNsTmptd3N3dnRTSG5yX3ZLeGJWZmo/RmRpYGw8V1xcbl9vTkBgVF9cXFteakpaP05qT3ZvUV54TWhmRz5dZ05rSk5iQkJbW2ZCPVZnW0NXSWR1d0lNZ2ZWXUNHPXJFZ2VKS1JCQ0Y+ZHlDPHlPXVNWQFFreHVWeVdKcHNKaG5WXVNzdHZWRHV4WFZBdG1KTFJCPjtMTkw9c0RwdE9xSm5lSmJhS0tgbEVMT1JcXGpKTFJCanZdTEU8dlNkT0RFT1JkbVdkTWZoUjw9S1tCW2N5VjtlPGViY2tEeE9zP09UajtDW1s6PFNOPU1nTDtEPmR2PEBMPD07Ojo6PmRzPDo6Ojo6W2JEaUJbWzo8U0NBeXk9TENJbkVBTFdEUWE8Sjo8SjpgblxcdE5cXHRUWzxQOzI7XCJce1x9
Quadriques
\302\251 Alain Le Stang - "Apprendre Maple" - 2006
S\303\251lectionner Edit/Execute/Worksheet ou cliquer le bouton !!! pour ex\303\251cuter ce Maplet.
restart;
with(Maplets[Elements]): with(Maplets[Tools]): with(plots):
-------------------------------------------------------------- ELLIPSOIDE --------------------------------------------------------------
ellipsoide := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Ellipsoide" end proc;
type := proc() ELLIPSOIDE end proc;
equation := proc() x^2/a^2 + y^2/b^2 +z^2/c^2=1 end proc;
param := proc(a,b,c) [a*cos(u)*cos(v), b*sin(u)*cos(v), c*sin(v)], u=0..2*Pi, v=-Pi/2..Pi/2 end proc;
traceX := proc(a,b,c,k) [k, cos(u)*sqrt(a^2-k^2)*b/a, sin(u)*sqrt(a^2-k^2)*c/a],u=0..2*Pi end proc;
traceY := proc(a,b,c,k) [a*sqrt(b^2-k^2)*cos(u)/b, k, c*sqrt(b^2-k^2)*sin(u)/b], u=0..2*Pi end proc;
traceZ := proc(a,b,c,k) [a*sqrt(c^2-k^2)*sin(u)/c, b*sqrt(c^2-k^2)*cos(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique \303\240 centre unique.","Surface non r\303\251gl\303\251e.",x=a*cos(phi)*cos(theta), y=b*cos(phi)*sin(theta), z=c*sin(phi), theta = 0..2*Pi, phi = -Pi/2..Pi/2, x*x[0]/a^2+y*y[0]/b^2+z*z[0]/c^2 = 1," " ]
end proc;
end module;
ellipsoide:-equation();
X:=spacecurve(ellipsoide:-traceX(3,4,5,2), thickness=3, color=cyan):
Y:=spacecurve(ellipsoide:-traceY(3,4,5,2), thickness=3, color=yellow):
Z:=spacecurve(ellipsoide:-traceZ(3,4,5,2), thickness=3, color=red):
Q:=plot3d(ellipsoide:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);
--------------------------------------------- HYPERBOLOIDE A UNE NAPPE -----------------------------------------------------------
hyp1 := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Hyperboloide a une nappe" end proc;
type := proc() HYP1 end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 end proc;
param := proc(a,b,c)
[a*cos(u)*cosh(v),b*sin(u)*cosh(v),c*sinh(v)],u=0..2*Pi,v=-arcsinh(10/c)..arcsinh(10/c)
end proc;
traceX := proc(a,b,c,k)
if abs(k)<a then
[[k,cosh(u)*sqrt(a^2-k^2)*b/a,sinh(u)*sqrt(a^2-k^2)*c/a],u=-arcsinh(10*a/(c*sqrt(a^2-k^2)))..arcsinh(10*a/(c*sqrt(a^2-k^2))),
[k,-cosh(u)*sqrt(a^2-k^2)*b/a,sinh(u)*sqrt(a^2-k^2)*c/a],u=-arcsinh(10*a/(c*sqrt(a^2-k^2)))..arcsinh(10*a/(c*sqrt(a^2-k^2)))]
elif abs(k)>a then
[[k,sinh(u)*sqrt(k^2-a^2)*b/a,cosh(u)*sqrt(k^2-a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2-a^2)))..arccosh(10*a/(c*sqrt(k^2-a^2))),
[k,sinh(u)*sqrt(k^2-a^2)*b/a,-cosh(u)*sqrt(k^2-a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2-a^2)))..arccosh(10*a/(c*sqrt(k^2-a^2)))]
else
[[k,b*u,c*u],u=-10/c..10/c,[k,-b*u,c*u],u=-10/c..10/c]
end if;
end proc;
traceY := proc(a,b,c,k)
if abs(k)<b then
[[cosh(u)*sqrt(b^2-k^2)*a/b,k,sinh(u)*sqrt(b^2-k^2)*c/b],u=-arcsinh(10*b/(c*sqrt(b^2-k^2)))..arcsinh(10*b/(c*sqrt(b^2-k^2))),
[-cosh(u)*sqrt(b^2-k^2)*a/b,k,sinh(u)*sqrt(b^2-k^2)*c/b],u=-arcsinh(10*b/(c*sqrt(b^2-k^2)))..arcsinh(10*b/(c*sqrt(b^2-k^2)))]
elif abs(k)>b then
[[sinh(u)*sqrt(k^2-b^2)*a/b,k,cosh(u)*sqrt(k^2-b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2-b^2)))..arccosh(10*b/(c*sqrt(k^2-b^2))),
[sinh(u)*sqrt(k^2-b^2)*a/b,k,-cosh(u)*sqrt(k^2-b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2-b^2)))..arccosh(10*b/(c*sqrt(k^2-b^2)))]
else
[[a*u,k,c*u],u=-10/c..10/c,[-a*u,k,c*u],u=-10/c..10/c]
end if;
end proc;
traceZ := proc(a,b,c,k) [ a*sqrt(k^2+c^2)*sin(u)/c, b*sqrt(k^2+c^2)*cos(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique \303\240 centre unique.","Surface r\303\251gl\303\251e.",x=a*cosh(phi)*cos(theta), y=b*cosh(phi)*sin(theta), z=c*sinh(phi), theta = 0..2*Pi, phi = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = 1," " ]
end proc;
end module;
hyp1:-equation();
X:=spacecurve(op(hyp1:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp1:-traceX(3,4,5,2)[3..4]), thickness=3, color=cyan):
Y:=spacecurve(op(hyp1:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp1:-traceY(3,4,5,2)[3..4]), thickness=3, color=yellow):
Z:=spacecurve(hyp1:-traceZ(3,4,5,2), thickness=3, color=red):
Q:=plot3d(hyp1:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);
--------------------------------------------- HYPERBOLOIDE A DEUX NAPPES -----------------------------------------------------------
hyp2 := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Hyperboloide a deux nappes" end proc;
type := proc() HYP2 end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = -1 end proc;
param := proc(a,b,c)
[[a*cos(u)*sinh(v), b*sin(u)*sinh(v), c*cosh(v)], u=0..2*Pi,v=-arccosh(10/c)..arccosh(10/c),
[a*cos(u)*sinh(v), b*sin(u)*sinh(v), -c*cosh(v)], u=0..2*Pi,v=-arccosh(10/c)..arccosh(10/c)]
end proc;
traceX := proc(a,b,c,k) [[k,sinh(u)*sqrt(k^2+a^2)*b/a,cosh(u)*sqrt(k^2+a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2+a^2)))..arccosh(10*a/(c*sqrt(k^2+a^2))),
[k,sinh(u)*sqrt(k^2+a^2)*b/a,-cosh(u)*sqrt(k^2+a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2+a^2)))..arccosh(10*a/(c*sqrt(k^2+a^2)))]
end proc;
traceY := proc(a,b,c,k)
[[sinh(u)*sqrt(k^2+b^2)*a/b,k,cosh(u)*sqrt(k^2+b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2+b^2)))..arccosh(10*b/(c*sqrt(k^2+b^2))),
[sinh(u)*sqrt(k^2+b^2)*a/b,k,-cosh(u)*sqrt(k^2+b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2+b^2)))..arccosh(10*b/(c*sqrt(k^2+b^2)))]
end proc;
traceZ := proc(a,b,c,k) [ a*sqrt(k^2-c^2)*sin(u)/c, b*sqrt(k^2-c^2)*cos(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique \303\240 centre unique.","Surface non r\303\251gl\303\251e.",x=a*sinh(phi)*cos(theta), y=b*sinh(phi)*sin(theta), z=\302\261*c*cosh(phi), theta = 0..2*Pi, phi = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = -1," " ]
end proc;
end module;
X:=spacecurve(op(hyp2:-traceX(3,5,2,6)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp2:-traceX(3,5,2,6)[3..4]), thickness=3, color=cyan):
Y:=spacecurve(op(hyp2:-traceY(3,5,2,6)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp2:-traceY(3,5,2,6)[3..4]), thickness=3, color=yellow):
Z:=spacecurve(hyp2:-traceZ(3,5,2,6), thickness=3, color=red):
Q:=plot3d(op(hyp2:-param(3,5,2)[1..3])),plot3d(op(hyp2:-param(3,5,2)[4..6])):
display([Q,X,Y,Z],orientation=[45,60], scaling=unconstrained, axes = boxed);
--------------------------------------------- CONE ELLIPTIQUE (OU DU SECOND DEGRE) ------------------------------------------------
cone := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Cone elliptique" end proc;
type := proc() CONE end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = 0 end proc;
param := proc(a,b,c) [a*cos(u)*v, b*sin(u)*v, c*v], u=0..2*Pi,v=-10/c..10/c end proc;
traceX := proc(a,b,c,k)
if k<>0 then
[[k, k*b/a*sinh(u), k*c/a*cosh(u)], u=-arccosh(10*a/(abs(k)*c))..arccosh(10*a/(abs(k)*c)),
[k, k*b/a*sinh(u), -k*c/a*cosh(u)], u=-arccosh(10*a/(abs(k)*c))..arccosh(10*a/(abs(k)*c))]:
else
[[k,b*u,c*u], u=-10/c..10/c, [k,b*u,-c*u], u=-10/c..10/c ]:
end if;
end proc;
traceY := proc(a,b,c,k)
if k<>0 then
[[k*a/b*sinh(u),k, k*c/b*cosh(u)], u=-arccosh(10*b/(abs(k)*c))..arccosh(10*b/(abs(k)*c)),
[k*a/b*sinh(u),k, -k*c/b*cosh(u)], u=-arccosh(10*b/(abs(k)*c))..arccosh(10*b/(abs(k)*c))]
else
[[a*u,k,c*u], u=-10/c..10/c, [a*u,k,-c*u], u=-10/c..10/c ]
end if;
end proc;
traceZ := proc(a,b,c,k) [k*a*cos(u)/c, k*b*sin(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique \303\240 centre unique.","Surface r\303\251gl\303\251e.",x=a*lambda*cos(theta), y=b*lambda*sin(theta), z=c*lambda, theta = 0..2*Pi, lambda = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = 0," " ]
end proc;
end module;
X:=spacecurve(op(cone:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(cone:-traceX(3
,4,5,2)[3..4]), thickness=3, color=cyan):
Y:=spacecurve(op(cone:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(cone:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
Z:=spacecurve(cone:-traceZ(3,4,5,2), thickness=3, color=red):
Q:=plot3d(cone:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);
--------------------------------------------- PARABOLOIDE ELLIPTIQUE -----------------------------------------------------------
parabell := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Paraboloide elliptique" end proc;
type := proc() PARABELL end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z/c = 0 end proc;
param := proc(a,b,c) [a*cos(u)*v, b*sin(u)*v, c*v^2], u=0..2*Pi, v=0..sqrt(10/c) end proc;
traceX := proc(a,b,c,k)
if k^2/a^2<=10/c then
[[k,b*sqrt(u-k^2/a^2),c*u], u=k^2/a^2..10/c,
[k,-b*sqrt(u-k^2/a^2),c*u], u=k^2/a^2..10/c]
else
[[0,0,0], u=-a..a, [0,0,0], u=-a..a ]
end if;
end proc;
traceY := proc(a,b,c,k)
if k^2/b^2<=10/c then
[[a*sqrt(u-k^2/b^2),k,c*u], u=k^2/b^2..10/c ,
[-a*sqrt(u-k^2/b^2),k,c*u], u=k^2/b^2..10/c ]
else
[ [0,0,0], u=-a..a, [0,0,0], u=-a..a ]
end if;
end proc;
traceZ := proc(a,b,c,k)
if k>0 then
[a*cos(u)*sqrt(k/c),b*sin(u)*sqrt(k/c),k], u=0..2*Pi
else [0,0,0], u=-a..a;
end if;
end proc;
info := proc()
["Quadrique sans centre.","Surface non r\303\251gl\303\251e.",x=a*lambda*cos(theta), y=b*lambda*sin(theta), z=c*lambda^2, theta = 0..2*Pi, lambda = 0..infinity, x*x[0]/a^2+y*y[0]/b^2-(z+z[0])/(2*c) = 0," " ]
end proc;
end module;
X:=spacecurve(op(parabell:-traceX(3,5,4,2)[1..2]),thickness=3,color=cyan),spacecurve(op(parabell:-traceX(3,4,5,2)[3..4]), thickness=3, color=cyan):
Y:=spacecurve(op(parabell:-traceY(3,5,4,2)[1..2]),thickness=3,color=yellow),spacecurve(op(parabell:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
Z:=spacecurve(parabell:-traceZ(3,5,4,2), thickness=3, color=red):
Q:=plot3d(parabell:-param(3,5,4)):
display([Q,X,Y,Z],orientation=[45,60], scaling=unconstrained, axes = boxed);
--------------------------------------------- PARABOLOIDE HYPERBOLIQUE -----------------------------------------------------------
parabhyp := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Paraboloide hyperbolique" end proc;
type := proc() PARABHYP end proc;
equation := proc() x^2/a^2 - y^2/b^2 - z/c = 0 end proc;
param := proc(a,b,c) [u,v, c*(u^2/a^2-v^2/b^2)], u=-10..10, v=-10..10 end proc;
traceX := proc(a,b,c,k) [k,u,c*(k^2/a^2-u^2/b^2)], u=-10..10 end proc;
traceY := proc(a,b,c,k) [u,k,c*(u^2/a^2-k^2/b^2)], u=-10..10 end proc;
traceZ := proc(a,b,c,k)
[[a*sqrt(u^2/b^2+k/c), u, k], u=-10..10 , [-a*sqrt(u^2/b^2+k/c), u, k], u=-10..10 ]
end proc;
info := proc()
["Quadrique sans centre.","Surface r\303\251gl\303\251e.",x=theta, y=lambda, z=c*(theta^2/a^2-lambda^2/b^2), theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]/a^2-y*y[0]/b^2-(z+z[0])/(2*c) = 0,"Dans un rep\303\250re convenable, une \303\251quation est: xy=z." ]
end proc;
end module;
X:=spacecurve(parabhyp:-traceX(3,4,5,2),thickness=3,color=cyan):
Y:=spacecurve(parabhyp:-traceY(3,4,5,2),thickness=3,color=yellow):
Z:=spacecurve(op(parabhyp:-traceZ(3,4,5,2)[1..2]),thickness=3,color=red,view=[-10..10,-10..10,-10..10]),spacecurve(op(parabhyp:-traceZ(3,4,5,2)[3..4]),thickness=3,color=red,view=[-10..10,-10..10,-10..10]):
Q:=plot3d(parabhyp:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);
--------------------------------------------- CYLINDRE ELLIPTIQUE -----------------------------------------------------------
cylell := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Cylindre elliptique" end proc;
type := proc() CYLELL end proc;
equation := proc() x^2/a^2 + y^2/b^2 = 1 end proc;
param := proc(a,b,c) [a*cos(u), b*sin(u), v] ,u=0..2*Pi, v=-10..10 end proc;
traceX := proc(a,b,c,k)
[[k,b*sqrt(1-k^2/a^2),c*u],u=-10/c..10/c,
[k,-b*sqrt(1-k^2/a^2),c*u],u=-10/c..10/c ]
end proc;
traceY := proc(a,b,c,k)
[[a*sqrt(1-k^2/b^2),k,c*u],u=-10/c..10/c,
[-a*sqrt(1-k^2/b^2),k,c*u],u=-10/c..10/c ]
end proc;
traceZ := proc(a,b,c,k) [a*cos(u),b*sin(u),k],u=0..2*Pi end proc;
info := proc()
["Quadrique admettant une droite des centres (l'axe du cylindre).","Surface r\303\251gl\303\251e.",x=a*cos(theta), y=b*sin(theta), z=lambda, theta = 0..2*Pi, lambda = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2 = 1," " ]
end proc;
end module;
X:=spacecurve(op(cylell:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(cylell:-traceX(3,4,5,2)[3..4]),thickness=3,color=cyan):
Y:=spacecurve(op(cylell:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(cylell:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
Z:=spacecurve(cylell:-traceZ(3,4,5,2),thickness=3,color=red):
Q:=plot3d(cylell:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);
--------------------------------------------- CYLINDRE HYPERBOLIQUE -----------------------------------------------------------
cylhyp := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Cylindre hyperbolique" end proc;
type := proc() CYLHYP end proc;
equation := proc() x^2/a^2 - y^2/b^2 = 1 end proc;
param := proc(a,b,c)
[[a*cosh(u), b*sinh(u), v], u=-arcsinh(10/b)..arcsinh(10/b), v=-10..10,
[-a*cosh(u), b*sinh(u), v], u=-arcsinh(10/b)..arcsinh(10/b), v=-10..10 ]
end proc;
traceX := proc(a,b,c,k)
[[k,b*sqrt(-1+k^2/a^2),c*u],u=-10/c..10/c,
[k,-b*sqrt(-1+k^2/a^2),c*u],u=-10/c..10/c ]
end proc;
traceY := proc(a,b,c,k)
[[a*sqrt(1+k^2/b^2),k,c*u],u=-10/c..10/c,
[-a*sqrt(1+k^2/b^2),k,c*u],u=-10/c..10/c ]
end proc;
traceZ := proc(a,b,c,k)
[[a*cosh(u),b*sinh(u),k],u=-10..10,
[-a*cosh(u),b*sinh(u),k],u=-10..10 ]
end proc;
info := proc()
["Quadrique admettant une droite des centres (l'axe du cylindre).","Surface r\303\251gl\303\251e.",x=\302\261*a*cosh(theta), y=b*sinh(theta), z=lambda, theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]/a^2-y*y[0]/b^2 = 1," " ]
end proc;
end module;
X:=spacecurve(op(cylhyp:-traceX(3,4,5,6)[1..2]),thickness=3,color=cyan),spacecurve(op(cylhyp:-traceX(3,4,5,6)[3..4]),thickness=3,color=cyan):
Y:=spacecurve(op(cylhyp:-traceY(3,4,5,6)[1..2]),thickness=3,color=yellow),spacecurve(op(cylhyp:-traceY(3,4,5,6)[3..4]),thickness=3,color=yellow):
Z:=spacecurve(op(cylhyp:-traceZ(3,4,5,6)[1..2]),thickness=3,color=red),spacecurve(op(cylhyp:-traceZ(3,4,5,6)[3..4]),thickness=3,color=red):
Q:=plot3d(op(cylhyp:-param(3,4,5)[1..3])),plot3d(op(cylhyp:-param(3,4,5)[4..6])):
display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed,view=[-10..10,-10..10,-10..10]);
--------------------------------------------- CYLINDRE PARABOLIQUE -----------------------------------------------------------
cylparab := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;
nom := proc() "Cylindre parabolique" end proc;
type := proc() CYLPARAB end proc;
equation := proc() x^2 = 2*a*y end proc;
param := proc(a,b,c) [u, u^2/(2*a), v], u=-10..10, v=-10..10 end proc;
traceX := proc(a,b,c,k) [k,k^2/(2*a),u],u=-10..10 end proc;
traceY := proc(a,b,c,k)
[[sqrt(2*a*k),k,u],u=-10..10,
[-sqrt(2*a*k),k,u],u=-10..10 ]
end proc;
traceZ := proc(a,b,c,k) [u,u^2/(2*a),k],u=-10..10 end proc;
info := proc()
["Quadrique sans centre.","Surface r\303\251gl\303\251e.",x=theta, y=theta^2/(2*a), z=lambda, theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]-a*(y+y[0]) = 0," " ]
end proc;
end module;
X:=spacecurve(cylparab:-traceX(3,4,5,8),thickness=3,color=cyan):
Y:=spacecurve(op(cylparab:-traceY(3,4,5,8)[1..2]),thickness=3,color=yellow),spacecurve(op(cylparab:-traceY(3,4,5,8)[3..4]),thickness=3,color=yellow):
Z:=spacecurve(cylparab:-traceZ(3,4,5,8),thickness=3,color=red):
Q:=plot3d(cylparab:-param(3,4,5)):
display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);
------------------------------------------------------ GESTION DES OPTIONS -------------------------------------------------------------------------------------
optionAxes:=proc()
MesOptions[1]
end proc:
optionRepere:=proc()
MesOptions[2]
end proc:
optionProj:=proc()
MesOptions[3]
end proc:
optionOmbre:=proc()
MesOptions[4]
end proc:
optionLumiere:=proc()
MesOptions[5]
end proc:
optionStyle:=proc()
MesOptions[6]
end proc:
optionType:=proc()
MesOptions[7]
end proc:
MiseAJourOptions:=proc()
global MesOptions;
local opt,equation,visibleSliders;
opt:=NULL:visibleSliders:=[true,true]:
# option Axes
if Maplets:-Tools:-Get('MenuAxes1'('value')) then opt:=opt,NORMAL end if:
if Maplets:-Tools:-Get('MenuAxes2'('value')) then opt:=opt,BOXED end if:
if Maplets:-Tools:-Get('MenuAxes3'('value')) then opt:=opt,FRAMED end if:
if Maplets:-Tools:-Get('MenuAxes4'('value')) then opt:=opt,NONE end if:
# option Rep\303\250re
if Maplets:-Tools:-Get('MenuRepere1'('value')) then opt:=opt,CONSTRAINED end if:
if Maplets:-Tools:-Get('MenuRepere2'('value')) then opt:=opt,UNCONSTRAINED end if:
# option Projection
if Maplets:-Tools:-Get('MenuProj1'('value')) then opt:=opt,NORMAL end if:
if Maplets:-Tools:-Get('MenuProj2'('value')) then opt:=opt,ORTHOGONAL end if:
if Maplets:-Tools:-Get('MenuProj3'('value')) then opt:=opt,FISHEYE end if:
# option Ombre
if Maplets:-Tools:-Get('MenuOmbre1'('value')) then opt:=opt,XYZ end if:
if Maplets:-Tools:-Get('MenuOmbre2'('value')) then opt:=opt,XY end if:
if Maplets:-Tools:-Get('MenuOmbre3'('value')) then opt:=opt,Z end if:
if Maplets:-Tools:-Get('MenuOmbre4'('value')) then opt:=opt,ZGRAYSCALE end if:
if Maplets:-Tools:-Get('MenuOmbre5'('value')) then opt:=opt,ZHUE end if:
if Maplets:-Tools:-Get('MenuOmbre6'('value')) then opt:=opt,NONE end if:
# option Lumi\303\250re
if Maplets:-Tools:-Get('MenuLumiere1'('value')) then opt:=opt,light1 end if:
if Maplets:-Tools:-Get('MenuLumiere2'('value')) then opt:=opt,light2 end if:
if Maplets:-Tools:-Get('MenuLumiere3'('value')) then opt:=opt,light3 end if:
if Maplets:-Tools:-Get('MenuLumiere4'('value')) then opt:=opt,light4 end if:
if Maplets:-Tools:-Get('MenuLumiere5'('value')) then opt:=opt,NONE end if:
# option Style
if Maplets:-Tools:-Get('MenuStyle1'('value')) then opt:=opt,PATCH end if:
if Maplets:-Tools:-Get('MenuStyle2'('value')) then opt:=opt,HIDDEN end if:
if Maplets:-Tools:-Get('MenuStyle3'('value')) then opt:=opt,WIREFRAME end if:
if Maplets:-Tools:-Get('MenuStyle4'('value')) then opt:=opt,CONTOUR end if:
if Maplets:-Tools:-Get('MenuStyle5'('value')) then opt:=opt,PATCHNOGRID end if:
if Maplets:-Tools:-Get('MenuStyle6'('value')) then opt:=opt,PATCHCONTOUR end if:
if Maplets:-Tools:-Get('MenuStyle7'('value')) then opt:=opt,LINE end if:
if Maplets:-Tools:-Get('MenuStyle8'('value')) then opt:=opt,POINT end if:
# option Type de Quadrique et fenetre Information
if Maplets:-Tools:-Get('MenuType1'('value')) then
opt:=opt,ellipsoide:-type(): equation:=ellipsoide:-equation():
end if:
if Maplets:-Tools:-Get('MenuType2'('value')) then
opt:=opt,hyp1:-type(): equation:=hyp1:-equation():
end if:
if Maplets:-Tools:-Get('MenuType3'('value')) then
opt:=opt,hyp2:-type(): equation:=hyp2:-equation():
end if:
if Maplets:-Tools:-Get('MenuType4'('value')) then
opt:=opt,cone:-type(): equation:=cone:-equation():
end if:
if Maplets:-Tools:-Get('MenuType5'('value')) then
opt:=opt,parabell:-type(): equation:=parabell:-equation():
end if:
if Maplets:-Tools:-Get('MenuType6'('value')) then
opt:=opt,parabhyp:-type(): equation:=parabhyp:-equation():
end if:
if Maplets:-Tools:-Get('MenuType7'('value')) then
opt:=opt,cylell:-type(): equation:=cylell:-equation(): visibleSliders:=[true,false]:
end if:
if Maplets:-Tools:-Get('MenuType8'('value')) then
opt:=opt,cylhyp:-type(): equation:=cylhyp:-equation(): visibleSliders:=[true,false]:
end if:
if Maplets:-Tools:-Get('MenuType9'('value')) then
opt:=opt,cylparab:-type(): equation:=cylparab:-equation(): visibleSliders:=[false,false]:
end if:
# mise \303\240 jour de l'\303\251quation et des Sliders:
Maplets:-Tools:-Set('MMLV'('value')=MathML[Export](equation) ):
Maplets:-Tools:-Set('bLabel'('visible')= visibleSliders[1]):
Maplets:-Tools:-Set('cLabel'('visible')= visibleSliders[2]):
Maplets:-Tools:-Set('b'('visible')= visibleSliders[1]):
Maplets:-Tools:-Set('c'('visible')= visibleSliders[2]):
MesOptions:=[opt]:
end proc:
MiseAJourInfo:=proc()
# option Type de Quadrique et fenetre Information
if Maplets:-Tools:-Get('MenuType1'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=ellipsoide:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](ellipsoide:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](ellipsoide:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](ellipsoide:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](ellipsoide:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](ellipsoide:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](ellipsoide:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](ellipsoide:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=ellipsoide:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=ellipsoide:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=ellipsoide:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType2'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=hyp1:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](hyp1:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](hyp1:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](hyp1:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](hyp1:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](hyp1:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](hyp1:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](hyp1:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=hyp1:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=hyp1:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=hyp1:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType3'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=hyp2:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](hyp2:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](hyp2:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](hyp2:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](hyp2:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](hyp2:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](hyp2:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](hyp2:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=hyp2:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=hyp2:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=hyp2:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType4'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=cone:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cone:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cone:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cone:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cone:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cone:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cone:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cone:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=cone:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=cone:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=cone:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType5'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=parabell:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](parabell:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](parabell:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](parabell:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](parabell:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](parabell:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](parabell:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](parabell:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=parabell:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=parabell:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=parabell:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType6'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=parabhyp:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](parabhyp:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](parabhyp:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](parabhyp:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](parabhyp:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](parabhyp:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](parabhyp:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](parabhyp:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=parabhyp:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=parabhyp:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=parabhyp:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType7'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=cylell:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylell:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylell:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylell:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylell:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylell:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylell:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylell:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=cylell:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=cylell:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=cylell:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType8'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=cylhyp:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylhyp:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylhyp:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylhyp:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylhyp:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylhyp:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylhyp:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylhyp:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=cylhyp:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=cylhyp:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=cylhyp:-info()[9]):
end if:
if Maplets:-Tools:-Get('MenuType9'('value')) then
Maplets:-Tools:-Set('Titre'('caption')=cylparab:-nom()):
Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylparab:-equation())):
Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylparab:-info()[3])):
Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylparab:-info()[4])):
Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylparab:-info()[5])):
Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylparab:-info()[6])):
Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylparab:-info()[7])):
Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylparab:-info()[8])):
Maplets:-Tools:-Set('Centre'('caption')=cylparab:-info()[1]):
Maplets:-Tools:-Set('Reglee'('caption')=cylparab:-info()[2]):
Maplets:-Tools:-Set('Rem'('caption')=cylparab:-info()[9]):
end if
end proc:
-------------------------------------------- GRAPHE DE LA QUADRIQUE ET DES SECTIONS ---------------------------------------------------------
Quadrique:= proc(a, b, c, vView, hView)
local type,opt;
type:=optionType();
opt:=axes=optionAxes(), orientation=[hView, vView],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle(), titlefont = [TIMES, BOLD, 14]:
if type=ELLIPSOIDE then
plot3d(ellipsoide:-param(a,b,c), opt, title=ellipsoide:-nom())
elif type=HYP1 then
plot3d(hyp1:-param(a,b,c), opt, title=hyp1:-nom())
elif type=HYP2 then
display( [plot3d(op(hyp2:-param(a,b,c)[1..3])),plot3d(op(hyp2:-param(a,b,c)[4..6]))], opt, title=hyp2:-nom())
elif type=CONE then
plot3d(cone:-param(a,b,c), opt, title=cone:-nom())
elif type=PARABELL then
plot3d(parabell:-param(a,b,c), opt, title=parabell:-nom())
elif type=PARABHYP then
plot3d(parabhyp:-param(a,b,c), opt, title=parabhyp:-nom())
elif type=CYLELL then
plot3d(cylell:-param(a,b,c), opt, title=cylell:-nom())
elif type=CYLHYP then
display( [plot3d(op(cylhyp:-param(a,b,c)[1..3])),plot3d(op(cylhyp:-param(a,b,c)[4..6]))], opt, title=cylhyp:-nom())
else # CYLPARAB
plot3d(cylparab:-param(a,b,c), opt, title=cylparab:-nom())
end if;
end proc:
QuadSectionX := proc(k, a, b, c, hV, vV)
global GrapheX;
local x,type;
type:=optionType();
if type=ELLIPSOIDE then
x:=spacecurve(ellipsoide:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
x:=spacecurve(op(hyp1:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp1:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=HYP2 then
x:=spacecurve(op(hyp2:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp2:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CONE then
x:=spacecurve(op(cone:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cone:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABELL then
x:=spacecurve(op(parabell:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(parabell:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABHYP then
x:=spacecurve(parabhyp:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLELL then
x:=spacecurve(op(cylell:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cylell:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLHYP then
x:=spacecurve(op(cylhyp:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cylhyp:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
else # CYLPARAB
x:=spacecurve(cylparab:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
end if;
GrapheX:=display ([x], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:
QuadSectionY := proc (k, a, b, c, hV,vV)
global GrapheY;
local y,type;
type:=optionType();
if type=ELLIPSOIDE then
y:=spacecurve(ellipsoide:-traceY(a,b,c,k), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
y:=spacecurve(op(hyp1:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp1:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=HYP2 then
y:=spacecurve(op(hyp2:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp2:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CONE then
y:=spacecurve(op(cone:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cone:-traceY(a,b,c,k)[3..4]),thickness=3,color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABELL then
y:=spacecurve(op(parabell:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(parabell:-traceY(a,b,c,k)[3..4]),thickness=3,color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABHYP then
y:=spacecurve(parabhyp:-traceY(a,b,c,k), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLELL then
y:=spacecurve(op(cylell:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylell:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLHYP then
y:=spacecurve(op(cylhyp:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylhyp:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
else #CYLPARAB
y:=spacecurve(op(cylparab:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylparab:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
end if;
GrapheY:=display ([y], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(),shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:
QuadSectionZ := proc (k, a, b, c, hV,vV)
global GrapheZ;
local z,type,vw;
type:=optionType();
vw:=view=[-10..10,-10..10,-10..10];
if type=ELLIPSOIDE then
z:=spacecurve(ellipsoide:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
z:=spacecurve(hyp1:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP2 then
z:=spacecurve(hyp2:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CONE then
z:=spacecurve(cone:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=PARABELL then
z:=spacecurve(parabell:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=PARABHYP then
z:=spacecurve(op(parabhyp:-traceZ(a,b,c,k)[1..2]),thickness=3,color=red,vw),spacecurve(op(parabhyp:-traceZ(a,b,c,k)[3..4]),thickness=3,color=red,vw), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLELL then
z:=spacecurve(cylell:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLHYP then
z:=spacecurve(op(cylhyp:-traceZ(a,b,c,k)[1..2]),thickness=3,color=red,vw),spacecurve(op(cylhyp:-traceZ(a,b,c,k)[3..4]),thickness=3,color=red,vw), spacecurve([t,0,0], t=-a..a, color=white);
else # CYLPARAB
z:=spacecurve(cylparab:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
end if;
GrapheZ:=display ([z], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(),shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:
Vide:= proc(a,hV,vV)
display([spacecurve([t,0,0], t=-a..a, color = white)],axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle())
end proc:
TraceQuadSectionX:=proc(xsect,valX,a,b,c, hV,vV)
if xsect then
QuadSectionX(valX,a,b,c, hV,vV)
else
Vide(a, hV,vV)
end if;
end proc:
TraceQuadSectionY:=proc(ysect,valY,a,b,c, hV,vV)
if ysect then
QuadSectionY(valY,a,b,c, hV,vV)
else
Vide(a, hV,vV):
end if;
end proc:
TraceQuadSectionZ:=proc(zsect,valZ,a,b,c, hV,vV)
if zsect then
QuadSectionZ(valZ,a,b,c, hV,vV)
else
Vide(a, hV,vV)
end if;
end proc:
-------------------------------------------- GESTIONNAIRE D'ERREURS --------------------------------------------------------
TraceQuadrique := proc(a, b, c,vView, hView, xsection, ysection, zsection)
global GrapheQ;
try
GrapheQ:=display(Quadrique(a, b, c, vView, hView),xsection,ysection,zsection):
catch:
display(textplot3d([5,5,5,"Erreur dans les param\303\250tres."]), axes=NONE, view=[-10..10, -10..10, -10..10], color=RED, titlefont = [TIMES, BOLD, 14]):
end try;
end proc:
---------------------------------------------------------- ENREGISTRER AU FORMAT .GIF ---------------------------------
Enregistrer := proc()
global nomFichier,nouvGraphe,GrapheQ,GrapheX,GrapheY,GrapheZ;
if Maplets:-Tools:-Get('RB1'('value')) then nouvGraphe:=GrapheQ end if:
if Maplets:-Tools:-Get('RB2'('value')) then nouvGraphe:=GrapheX end if:
if Maplets:-Tools:-Get('RB3'('value')) then nouvGraphe:=GrapheY end if:
if Maplets:-Tools:-Get('RB4'('value')) then nouvGraphe:=GrapheZ end if:
if assigned( nomFichier ) then
plotsetup( 'gif', 'plotoutput' = nomFichier );
print( nouvGraphe );
plotsetup( 'default' );
nomFichier:='nomFichier';
else
EnregSous();
end if;
end proc:
EnregSous := proc()
global nomFichier;
local nnomFichier;
try
nnomFichier := Maplets:-Examples:-GetFile(
'title' = "Enregistrer sous",
'filefilter' = "gif",
'approvecaption' = "Enregistrer"
);
catch:
return;
end try;
if nnomFichier[-4..-1] = ".gif" then
nomFichier := nnomFichier;
else
nomFichier := cat( nnomFichier, ".gif" );
end if;
Enregistrer();
end proc:
-------------------------------------------- MAPLET QUADRIQUES --------------------------------------------------------------
MesOptions := [NORMAL, CONSTRAINED, NORMAL, XYZ, light1, PATCH, ELLIPSOIDE]:
nomFichier:='nomFichier': nouvGraphe:=NULL: GrapheQ:=NULL:
GrapheX:=NULL: GrapheY:=NULL: GrapheZ:=NULL:
QuadriquesMaplet := Maplet(
'onstartup' = RunWindow('FenPrincipale'),
Font['F1']('family'="TIMES", 'bold'='false', 'italic'='false', size=12),
Font['F2']('family'="TIMES", 'bold'='true', 'italic'='false', size=18),
Font['F3']('family'="TIMES", 'bold'='true', 'italic'='false', size=12),
ButtonGroup['Groupe0'](), ButtonGroup['Groupe1'](), ButtonGroup['Groupe2'](),
ButtonGroup['Groupe3'](), ButtonGroup['Groupe4'](), ButtonGroup['Groupe5'](),
ButtonGroup['Groupe6'](), ButtonGroup['Groupe7'](),
Window['FenPrincipale']('title' = "Quadriques", 'menubar'='Menu', 'layout' = 'PrincipalLayout' ),
Window['FenInfo']('title' = "Information", 'layout' = 'InfoLayout', width=500, height=650),
Window['FenDesc']('title' = "Description", 'layout' = 'DescLayout', width=400, height=500),
Window['FenAideEnreg']('title' = "Aide sur Enregistrer", 'layout' = 'AideEnregLayout', width=400, height=500),
Window['FenEnregistrer']('title' = "Enregistrer", 'layout' = 'EnregistrerLayout', width=400, height=250),
Window['FenApropos']('title' = "A propos", 'layout' = 'AproposLayout', width=400, height=300),
MenuBar['Menu'](
Menu("Type",
RadioButtonMenuItem['MenuType1']("Ellipso\303\257de",'value'=true,'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType2']("Hyperbolo\303\257de \303\240 une nappe",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType3']("Hyperbolo\303\257de \303\240 deux nappes",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType4']("C\303\264ne elliptique",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType5']("Parabolo\303\257de elliptique",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType6']("Parabolo\303\257de hyperbolique",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType7']("Cylindre elliptique",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType8']("Cylindre hyperbolique",'group'='Groupe0','onclick'='maj'),
RadioButtonMenuItem['MenuType9']("Cylindre parabolique",'group'='Groupe0','onclick'='maj'),
MenuSeparator(),
MenuItem("Information sur cette quadrique", onclick='inform')
),
Menu("Axes",
RadioButtonMenuItem['MenuAxes1']("Normal",'value'=true,'group'='Groupe1','onclick'='maj'),
RadioButtonMenuItem['MenuAxes2']("Boxed",'group'='Groupe1','onclick'='maj'),
RadioButtonMenuItem['MenuAxes3']("Framed",'group'='Groupe1','onclick'='maj'),
RadioButtonMenuItem['MenuAxes4']("None",'group'='Groupe1','onclick'='maj')
),
Menu("Rep\303\250re",
RadioButtonMenuItem['MenuRepere1']("Constrained",'value'=true,'group'='Groupe2','onclick'='maj') ,
RadioButtonMenuItem['MenuRepere2']("Unconstrained",'group'='Groupe2','onclick'='maj')
),
Menu("Projection", RadioButtonMenuItem['MenuProj1']("Normal",'value'=true,'group'='Groupe3','onclick'='maj'),
RadioButtonMenuItem['MenuProj2']("Orthogonal",'group'='Groupe3','onclick'='maj'),
RadioButtonMenuItem['MenuProj3']("Fisheye",'group'='Groupe3','onclick'='maj')
),
Menu("Ombre",
RadioButtonMenuItem['MenuOmbre1']("XYZ",'value'=true,'group'='Groupe4','onclick'='maj'),
RadioButtonMenuItem['MenuOmbre2']("XY",'group'='Groupe4','onclick'='maj'),
RadioButtonMenuItem['MenuOmbre3']("Z",'group'='Groupe4','onclick'='maj'),
RadioButtonMenuItem['MenuOmbre4']("ZGRAYSCALE ",'group'='Groupe4','onclick'='maj'),
RadioButtonMenuItem['MenuOmbre5']("ZHUE",'group'='Groupe4','onclick'='maj'),
RadioButtonMenuItem['MenuOmbre6']("None",'group'='Groupe4','onclick'='maj')
),
Menu("Lumi\303\250re",
RadioButtonMenuItem['MenuLumiere1']("Light1",'value'=true,'group'='Groupe5','onclick'='maj'),
RadioButtonMenuItem['MenuLumiere2']("Light2", 'group'='Groupe5','onclick'='maj'),
RadioButtonMenuItem['MenuLumiere3']("Light3",'group'='Groupe5','onclick'='maj'),
RadioButtonMenuItem['MenuLumiere4']("Light4",'group'='Groupe5','onclick'='maj'),
RadioButtonMenuItem['MenuLumiere5']("None",'group'='Groupe5','onclick'='maj')
),
Menu("Style",
RadioButtonMenuItem['MenuStyle1']("Patch",value=true,'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle2']("Hidden",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle3']("WireFrame",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle4']("Contour",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle5']("PatchNoGrid",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle6']("PatchContour",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle7']("Line",'group'='Groupe6','onclick'='maj'),
RadioButtonMenuItem['MenuStyle8']("Point",'group'='Groupe6','onclick'='maj')
),
Menu("Aide",
MenuItem("Description", onclick=RunWindow('FenDesc')),
MenuItem("Enregistrer", onclick=RunWindow('FenAideEnreg')),
MenuItem("A propos", onclick=RunWindow('FenApropos'))
)
), # fin MenuBar['Menu']
Action['maj'](
Evaluate('function' = "MiseAJourOptions"),
Evaluate('PlotterQ'='TraceQuadrique(
'a','b','c','phi','theta' ,
TraceQuadSectionX('boolX','valX','a','b','c','phi','theta'),
TraceQuadSectionY('boolY','valY','a','b','c','phi','theta'),
TraceQuadSectionZ('boolZ','valZ','a','b','c','phi','theta')
)') ,
Evaluate('PlotterX'='display(QuadSectionX('valX','a','b','c',0,90))') ,
Evaluate('PlotterY'='display(QuadSectionY('valY','a','b','c',90,90))'),
Evaluate('PlotterZ'='display(QuadSectionZ('valZ','a','b','c',90,0))')
),
Action['inform'](
Evaluate('function' = "MiseAJourInfo"),RunWindow('FenInfo')
),
BoxLayout['InfoLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
Label['Titre']('font'='F2', 'caption'=ellipsoide:-nom() ),
BoxRow('inset'=0, 'spacing'=0, 'border'=false,
MathMLViewer['MMLV1']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-equation()))
),
Label['Centre']( 'caption'=ellipsoide:-info()[1]),
Label['Reglee']( 'caption'=ellipsoide:-info()[2]),
Label['Rem'](),
VerticalGlue(),
Label('font'='F3', 'caption'="Param\303\251trage:"),
BoxLayout(
BoxColumn(
MathMLViewer['MMLV2']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[3])),
MathMLViewer['MMLV3']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[4])),
MathMLViewer['MMLV4']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[5]))
),
BoxColumn(
MathMLViewer['MMLV5']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[6])),
MathMLViewer['MMLV6']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[7]))
)
),
Label('font'='F3', 'caption'="Equation du plan tangent au point M0 (x0, y0, z0):"),
BoxRow('inset'=0, 'spacing'=0, 'border'=false,
MathMLViewer['MMLV7']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[8]))
),
BoxColumn(VerticalGlue(),VerticalGlue()),
Button("Fermer", CloseWindow('FenInfo'))
) ),
BoxLayout['DescLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
BoxRow('inset'=0, 'spacing'=0,
TextBox('wrapped'=true, 'width'=80, 'height'=20, ck,
'editable'='false', 'value'=
"Ce maplet donne la repr\303\251sentation graphique des 9 types de quadriques.\134nPour cela, cliquer le bouton ""Dessiner"" ou changer les options graphiques \303\240 partir des diff\303\251rents menus:\134nType, Axes, Rep\303\250re, Projection, Ombre, Lumi\303\250re, Style.\134n\134nCe maplet permet \303\251galement de visualiser les sections de la quadrique choisie par des plans d'\303\251quation X=k, Y=k ou Z=k.\134nPour cela, cliquer les options ""Section X"",""Section Y"", ""Section Z"" et saisissez la valeur de k.\n\nPour sauvegarder les graphiques cr\303\251\303\251s au format .gif, cliquer le bouton ""Enregistrer"".\134n\134nPour obtenir des informations compl\303\251mentaires sur la quadrique choisie, cliquer le bouton ""Infos"".\134n\134nPour quitter la fen\303\252tre de Maplet, cliquer le bouton ""Fermer""."
)
),
BoxRow('inset'=0, 'spacing'=0,
Button("Fermer", CloseWindow('FenDesc') )
)
)
),
BoxLayout['EnregistrerLayout'](
BoxColumn(
BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
[RadioButton['RB1']("Quadrique",'value'=true,'group'='Groupe7'),
RadioButton['RB2']("Section X",'group'='Groupe7'),
RadioButton['RB3']("Section Y",'group'='Groupe7'),
RadioButton['RB4']("Section Z",'group'='Groupe7')],
Button("Enregistrer", Evaluate('function' = "Enregistrer"))
),
Button("Fermer", CloseWindow('FenEnregistrer'))
)
),
BoxLayout['AideEnregLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
BoxRow('inset'=0, 'spacing'=0,
TextBox('wrapped'=true, 'width'=80, 'height'=18, ck,
'editable'='false', 'value'=
"Pour enregistrer les graphiques cr\303\251\303\251s au format .gif, cliquer le bouton ""Enregistrer"" de la fen\303\252tre principale.\134n\134nEnsuite, s\303\251lectionner l'une des 4 options:\134nQuadrique(sauvegarde du graphique de la quadrique avec \303\251ventuellement ses sections)\134nSection X (sauvegarde du graphique de la section de la quadrique par le plan X=k)\134nSection Y (sauvegarde du graphique de la section de la quadrique par le plan Y=k)\134nSection Z (sauvegarde du graphique de la section de la quadrique par le plan Z=k)\134n\134nCliquer ensuite le bouton ""Enregistrer"".\134nEntrer alors un nom de fichier pour le graphique s\303\251lectionn\303\251.\134n\134nPour quitter la fen\303\252tre ""Enregistrer"", cliquer le bouton ""Fermer""."
)
),
BoxRow('inset'=0, 'spacing'=0,
Button("Fermer", CloseWindow('FenAideEnreg') )
)
)
),
BoxLayout['AproposLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
Label(font=F2,"Quadriques"),
Label("\302\251 Alain Le Stang - ""Apprendre Maple"" - 2004"),
Button("Fermer", CloseWindow('FenApropos'))
)), # fin BoxLayout['AproposLayout']
BoxLayout['PrincipalLayout'](
BoxColumn(
BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Param\303\250tres",
BoxRow('inset'=0, 'spacing'=0,
Label['aLabel'](" a: "), Slider['a'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=3,'onchange'='maj')
),
BoxRow('inset'=0, 'spacing'=0,
Label['bLabel'](" b: "), Slider['b'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=5,'onchange'='maj')
),
BoxRow('inset'=0, 'spacing'=0,
Label['cLabel'](" c: "), Slider['c'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=4,'onchange'='maj')
)
),
BoxRow('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Equation",
MathMLViewer['MMLV'](height = 70, width = 200)
),
BoxRow('inset'=0, 'spacing'=0,
Button(" Dessiner ", 'tooltip'="Dessiner", 'onclick'='maj'),
Button(" Infos ", 'tooltip'="Informations", 'onclick'='inform')
),
BoxRow('inset'=0, 'spacing'=0,
Button("Enregistrer", 'tooltip'="Enregistrer", RunWindow('FenEnregistrer') ),
Button("Fermer", 'tooltip'="Fermer", Shutdown())
)
),
BoxRow('inset'=0, 'spacing'=0,
BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Quadrique",
BoxRow('inset'=0, 'spacing'=0,
Plotter['PlotterQ']()
),
BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Orientation: theta, phi", Slider['theta'](lower=0,filled=true,majorticks=30,minorticks=10,orientation=horizontal,snapticks=false,upper=360,value=45,'onchange'='maj'),
Slider['phi'](lower=0,filled=true,majorticks=30,minorticks=10,orientation=horizontal,snapticks=false,upper=360,value=60,'onchange'='maj')
),
BoxRow('inset'=0, 'spacing'=0,
[CheckBox['boolX'](caption="Section X", 'onchange'='maj')],
[CheckBox['boolY'](caption="Section Y", 'onchange'='maj')],
[CheckBox['boolZ'](caption="Section Z", 'onchange'='maj')])
),
BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Sections",
Plotter['PlotterX'](width=150, height=150),
BoxRow('inset'=0, 'spacing'=0, 'border'=true,
Label("Section X = "),
TextField['valX'](3,'value'=2)
),
Plotter['PlotterY'](width=150, height=150),
BoxRow('inset'=0, 'spacing'=0, 'border'=true,
Label("Section Y = "),
TextField['valY'](3,'value'=2)
),
Plotter['PlotterZ'](width=150, height=150),
BoxRow('inset'=0, 'spacing'=0, 'border'=true,
Label("Section Z = "),
TextField['valZ'](3,'value'=2)
)
)
) # fin BoxLayout['PrincipalLayout']
)
):
Maplets[Display] (QuadriquesMaplet);