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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 17:13   #11
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Я не проверял Ваши формулу, скажу лишь, что Вы зря ввели x(D) и y(D). Выполните, до начала собственно решения задачи, параллельный перенос, так чтобы т.A оказалась в начале координат, а потом - поворот вокруг неё, так чтобы линия AD оказалась совпадающей с осью OX. Получится 2 нелинейных ур-я, например, относительно углов DAB и ABC. Хотите элегантности - решайте численно систему. Пофиг элегантость? - ищите, как уже было сказано, минимум ф-ии двух переменных (вышеназванных углов). Потом - обратные поворот и перенос.

Вполне допускаю, что там даже аналитическое решение найти можно, но мне, честно, лень в книгу лезть...
Vago вне форума Ответить с цитированием
Старый 17.03.2011, 17:16   #12
Русский человек
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

Цитата:
Только НЕ на Рапиде, естественно.
Вы имели в виду, на Рапире? =) Не, спасибо, закодировать я и сам могу. Основная сложность ведь состоит в том, чтобы вывести эти функции.

Наглядности ради, схема:
Русский человек вне форума Ответить с цитированием
Старый 17.03.2011, 17:31   #13
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Для простоты легче их изогнуть так, чтобы B и C оказались по одну сторону от линии (AD).

|AB|cos(alpha)+|BC|cos(alpha+beta-Pi)+|CD|sin(alpha+(c+1)beta-3Pi/2) = |AD|
|AB|sin(alpha)+|BC|sin(alpha+beta-Pi)-|CD|cos(alpha+(c+1)beta-3Pi/2) = 0

(это, повторяю, - после описанных выше переноса и поворота)
alpha = DAB
beta = ABC
(только, моё c - это 1/c у Вас).

Последний раз редактировалось Vago; 17.03.2011 в 17:55. Причина: Набил Pi везде в одинаковой манере.
Vago вне форума Ответить с цитированием
Старый 17.03.2011, 17:39   #14
Русский человек
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

Спасибо за вариант, надо подумать.
Русский человек вне форума Ответить с цитированием
Старый 17.03.2011, 17:47   #15
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

from math import cos, sin, sqrt, pi

def DegToRad( x ):
   return x * pi / 180.


def RadToDeg( x ):
   return x * 180. / pi


# Заменить присваивания на ввод!!
AD = 10.
AB =  4.
BC =  4.
CD =  4.
c =   1.0

Bx = By = Cx = Cy = Dx = Dy = 0.
alpha = 0.	# Угол DAB
beta = 0.	# Угол ABC
gamma =  0.	# Угол BCD
gamma1 = 0. # Угол C1 C D (где C1 - проекция т.C на OX (AD))


def ComputeCoordsAndAngles( alpha, beta ):
   Bx = AB * cos( alpha )
   By = AB * sin( alpha )
   Cx = Bx + BC * cos( alpha + beta - pi )
   Cy = By + BC * sin( alpha + beta - pi )
   gamma = c * beta
   gamma1 = gamma + alpha + beta - 3.*pi/2.
   Dx = Cx + CD * sin( gamma1 )
   Dy = Cy - CD * cos( gamma1 )

   return (Bx, By, Cx, Cy, Dx, Dy, gamma, gamma1)


def DistToD( alpha, beta ):
   (Bx, By, Cx, Cy, Dx, Dy, gamma, gamma1 ) = ComputeCoordsAndAngles( alpha, beta )
   return sqrt( (AD-Dx)*(AD-Dx) + Dy*Dy )


alphaFoo = 0.
deAlpha = 0.01 ; deBeta = 0.01
dist0 = abs( DistToD( alpha, beta ) )

while alphaFoo <= pi:
   betaFoo = 0.
   while betaFoo <= pi:
      dist = DistToD( alphaFoo, betaFoo )
      if dist < dist0:
         dist0 = abs( dist )
         alpha = alphaFoo
         beta = betaFoo
      betaFoo += deBeta
   alphaFoo += deAlpha

DistToD( alpha, beta )
print ; print "alpha = %2.f (%.2f rad)" % (RadToDeg(alpha), alpha)
(Bx, By, Cx, Cy, Dx, Dy, gamma, gamma1) = ComputeCoordsAndAngles( alpha, beta )
print "B = ( %.2f, %.2f )" % (Bx, By)
print "beta = %.2f (%.2f rad)" % (RadToDeg(beta), beta)
print "C = ( %.2f, %.2f )" % (Cx, Cy)
print "gamma = %.2f (%.2f rad)" % (RadToDeg(gamma), gamma)
print "D = ( %.2f, %.2f )" % (Dx, Dy)

#
110317.jpg

Анализа существования решения - нет, поиск минимума - совершенно тупой, переносы/повороты и графика предлагаются желающим в качестве упражнения...
Vago вне форума Ответить с цитированием
Старый 17.03.2011, 17:57   #16
Русский человек
 
Регистрация: 17.03.2011
Сообщений: 9
По умолчанию

Большое Вам спасибо! Сейчас попробую применить Ваш код.
Русский человек вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51
Задача Anna T Паскаль, Turbo Pascal, PascalABC.NET 4 13.12.2010 18:47
Задача 1 UnLimited Помощь студентам 1 13.10.2010 19:26
Задача darter96 Помощь студентам 2 24.06.2009 15:34