Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2015, 11:46   #31
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не знаю. В ПВО не служил.
Забей.
Эта тема меня устала, пойду отпишусь.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.07.2015, 11:54   #32
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А нахождение координат точки по пеленгу от двух известных точек - это тогда что?
З.Ы. Служил в ПВО.
ПВО монополизировало использование термина triangulation?
Vago вне форума Ответить с цитированием
Старый 06.07.2015, 11:54   #33
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Автор, твоя задача делится на 2 части.
первая часть вот тут
http://www.opita.net/node/12
не забывай, что у тебя есть ещё высота, а это значит что будет ещё Z
Код:
  TNodePoint = record
     X,Y  : Integer;
     Z     : integer;
     Next : TListPoints;
  end;
вторая часть - получение суммарной площади всех треугольников

немного подшаманив в вышеуказанном коде (его скачать можно в ссылке внизу страницы) получил примочку ....
Вложения
Тип файла: zip triangle.zip (239.0 Кб, 15 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 06.07.2015, 17:00   #34
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Мне кажется, тут можно поступать проще, ибо сетка по осям x и y, как уже говорилось, - регулярная.
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-
from numpy import double, sqrt


class Point3D ( object ):
    def __init__( self, x, y, z ):
        self.x = x
        self.y = y
        self.z = z


class Vector3D ( object ):
    def __init__( self, x, y, z ):
        self.x = x
        self.y = y
        self.z = z


def GenerateSampleMesh( test ):
    x  = -R
    nX = 0

    while ( x <= R ):
        if test == 1:
            z = 0.
        elif test == 2:
            z = sqrt( R*R-x*x )
        else:
            z = 0.
        slice1.append( Point3D( x, 0., z ) )
        slice2.append( Point3D( x, 1., z ) )
        nX = nX+1
        x = xS + double(nX) * deX


def VectorLength( v ):
    return sqrt( v.x*v.x + v.y*v.y + v.z*v.z )


def TriangleArea( pt1, pt2, pt3 ):
    v1 = Vector3D( pt2.x - pt1.x, pt2.y - pt1.y, pt2.z - pt1.z)
    v2 = Vector3D( pt3.x - pt1.x, pt3.y - pt1.y, pt3.z - pt1.z)
    crossProduct = Vector3D( v1.y*v2.z-v1.z*v2.y, v1.z*v2.x-v1.x*v2.z, v1.x*v2.y-v1.y*v2.x )

    return 0.5 * VectorLength( crossProduct )


def SurfaceArea():
    S = 0.
    for j in range (0,len(slice1)-1 ):
        S = S + TriangleArea( slice1[j], slice1[j+1], slice2[j] )
        S = S + TriangleArea( slice1[j], slice2[j+1], slice2[j] )

    return S


slice1 = []
slice2 = []

nIntervalsX = 16
R   = 1.
xS  = -R
deX = 2. * R / nIntervalsX


def main():
    GenerateSampleMesh( 1 )
    print " S1 =", SurfaceArea()

    del slice1[:] ; del slice2[:]
    GenerateSampleMesh( 2 )
    print " S2 = ", SurfaceArea()


main()

#
krugliy, Делфи не знаю, терпИте Питон. Вычисляется площадь полосы шириной 1 по y (синяя ось), в пределах [-R,R] по x (красная ось). R для простоты взято равным 1. Интервал по x разбивается на nIntervalsX частей равной длины. В первом тесте поверхность лежит в плоскости XOY (все z = 0).
Test1.jpg

Во втором поверхность - половина цилиндра радиусом R (и высотой, как уже говорилось, 1).
Test2.jpg
(левую систему координат, надеюсь, тоже потЕрпите).

Результаты для nIntervalsX = 16:
Results.jpg

Понятно, что в первом тесте это значение на точность не влияет, Во втором же, увеличив его хотя бы до 128, получим, как и положено, Pi.

Последний раз редактировалось Vago; 06.07.2015 в 17:26. Причина: Для поддержания общности переименовал одну из ф-й.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить площадь фигуры в Delphi lerak92 Помощь студентам 12 12.02.2014 22:19
Вычислить площадь фигуры, ограниченной линиями. rinoolik Помощь студентам 0 04.05.2013 14:55
Вычислить с заданной точностью значение функции, представленной в виде бесконечного ряда _ROBERT_ Помощь студентам 7 30.10.2012 21:57