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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 00:18   #11
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

тоесть моё условие неверно?
surovii вне форума Ответить с цитированием
Старый 22.03.2009, 01:18   #12
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
r=y когда х=0 и тогда одна точка пересечения с осью.. разве нет?
нет, потому что x=0 - значит точка (центр окружности) лежит на оси ординат OY, а значит по-любому будет две точки пересечения, какой бы "y" там не был
capta1n вне форума Ответить с цитированием
Старый 22.03.2009, 10:43   #13
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

спасибо..
а что можете сказать вот по этому условию: Заданы окружность и множество треугольников. Если все треугольники лежат в 4-ой четверти, то найти треугольник с наименьшей площадью. В противном случае найти количество треугольников, лежащих целиком в этой окружности.
surovii вне форума Ответить с цитированием
Старый 22.03.2009, 11:51   #14
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

если имеется в виду 4 четверть декартовых прямоугольных координат, значит по данным определяем - если все ординаты вершин треугольников отрицательны, а абсциссы положительны, значит они лежат в 4 четверти координатной плоскости, ну а потом проверяете, лежат ли они целиком в четвертой четверти окружности - уравнение окружности sqr(x-x0)+sqr(y-y0)=sqr(r), x0,y0 - координаты центра. То есть каждая координата ваших треугольников, удовлетворяющих условию "лежания" в четвертой четверти окружности, должна соответствовать неравенству (sqr(x1-x0)+sqr(y1-y0)<=sqr(r)) and (x1>=0) and (y1<=0) (соответственно так же координаты x2,y2 и т.д. Ну и сравнивать площади треугольников по формуле Герона S=sqrt(p*(p-a)*(p-b)*(p-c)), где a,b,c - стороны треугольника, которые будут искаться вами из значений вершин a=sqrt(sqr(x1-x2)+sqr(y1-y2)), ну и p=(a+b+c)/2 (полупериметр). если какие-то условия вышесказанного не выполняются, то ищите треугольники, которые лежат целиком в этой окружности, тобишь опять проверяете на принажлежность координат треугольников кругу, то есть sqr(x1-x0)+sqr(y1-y0)<=sqr(r), где x0,y0 - координаты центра, r - радиус окружности

Последний раз редактировалось capta1n; 22.03.2009 в 12:13.
capta1n вне форума Ответить с цитированием
Старый 22.03.2009, 11:55   #15
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию

1) Проверяешь, все ли треугольники имеют отрицательную ординату и положительную абсцису.
2) Если да, то вычисляешь площадь каждого треугольника и производишь поиск минимума этой последовательности.
3) Если нет, то производишь поиск всех треугольников, чьи вершины отдалены от центра окружности не более, чем на радиус.

Таки напишу код (не лень же под хорошую музыку что-то хорошее написать...)
Код:
{Pascal}
type tp=real;
type TVertex=record x,y:tp end;
type TPol=record a,b,c:TVertex end;
type TArr=array[byte] of TPol;
var Cx,Cy,R:tp; {cyrcle}
var pols:TArr;
var n,i:byte;{counters}

function Condition:boolean;
var k:word; {<!-- нельзя использовать byte!}
begin
  {Condition:=true;}
  k:=0;
  {$B+} {<-- прошу обратить внимание на состояние этой опции, могу ошибиться в знаке, но её обязательно надо определить правильно, в противном случае программа может выдать ошибку при проверке условия цикла.}
  while (k<=n) and (pols[k].a.x>=0) and (pols[k].a.y<=0) and (pols[k].b.x>=0) and (pols[k].b.y<=0) and (pols[k].c.x>=0) and (pols[k].c.y<=0) do inc(k);
  Condition:=(k=n);
end;

function S(t:TPol):tp;
begin
    S:=... {имея базовые знания геометрии и векторной алгебры, можно вывести какую-то громоздкую формулу для площади. Или же воспользоваться формулой Герона... Напишете самостоятельно}
end;

procedure Pr1;
var k:word;
var min:tp;
begin
  min:=S(pols[0]);
  for k:=1 to n-1 do
    if S(pols[k])<min then min:=S(pols[k]);
  write(min);
end;

function PointInCyrcle(P:TVertex):boolean;
begin
    PointInCyrcle:=(sqr(P.x-Cx)+sqr(P.y-Cy))<=sqr(R);
end;

procedure Pr2;
var cc:word;
begin
  cc:=0;
  for i:=0 to n-1 do
    if PointInCyrcle(pols[i].a) and PointInCyrcle(pols[i].b) and PointInCyrcle(pols[i].c) then inc(cc);
  write(cc);
end;

begin
read(n,Cx,Cy,R);
for i:=0 to n-1 do read(pols[i].a.x,posl[i].a.y,pols[i].b.x,posl[i].b.y,pols[i].b.x,posl[i].b.y);
{<!-- -->}
if Condition 
  then Pr1
  else Pr2
end;
P.S. описание capta1n поможет.
Silence is of great value...

Последний раз редактировалось Jean-Esther; 22.03.2009 в 13:09. Причина: счетчик цикла
Jean-Esther вне форума Ответить с цитированием
Старый 22.03.2009, 12:02   #16
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

О_о
спсасибо..
surovii вне форума Ответить с цитированием
Старый 22.03.2009, 12:14   #17
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

почему-то не могу оставить Вам отзыв
capta1n вне форума Ответить с цитированием
Старый 22.03.2009, 13:37   #18
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

а площадь можно вычислять так:
function S(t:TPol):tp;
p,ab,bc,ac:real;
begin
ab:=sqrt(sqr(A.x-B.x)+sqr(A.y-B.y));
bc:=sqrt(sqr(B.x-C.x)+sqr(B.y-C.y));
ac:=sqrt(sqr(A.x-C.x)+sqr(A.y-C.y));
p:=(ab+bc+ac)/2;
S:=sqrt(p*(p-ab)*(p-bc)*(p-ac));
end; ??
surovii вне форума Ответить с цитированием
Старый 22.03.2009, 13:42   #19
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

чёт я совсем запутался.. просто начал немного по другому..:
implementation

type circl=record
x:integer;
y:integer;
r:integer;
end;
coord=record
x:integer;
y:integer;
end;
treug=record
A,B,C:coord;
menplosadi:real;
koltreugvokr:integer;
end;
var T:array [1..10] of treug;
o:coord; r:integer;
{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,koltreug:integer;
begin
//круг
o.x:=strtoint(edit1.Text);
o.y:=strtoint(edit2.Text);
r:=strtoint(edit3.Text);
koltreug:=strtoint(edit4.Text);
// вводим треугольники
for i:=1 to koltreug do
begin
T[i].A:=strtoint(stringgrid1.cells[1,i]);
T[i].B:=strtoint(stringgrid1.cells[2,i]);
T[i].C:=strtoint(stringgrid1.cells[3,i]);

end;
end;
surovii вне форума Ответить с цитированием
Старый 22.03.2009, 13:42   #20
surovii
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 31
По умолчанию

каша какая-то в голове....
surovii вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окружность и точки. Дельфи Rancid Помощь студентам 6 20.11.2010 20:08
вписать в треугольник окружность stimswall Помощь студентам 3 21.03.2009 03:15
простые числа.окружность. Verochka Помощь студентам 15 31.12.2008 08:22
Вписанная в выпуклый n-угольник окружность Nixond Паскаль, Turbo Pascal, PascalABC.NET 10 15.10.2008 13:28
нарисовать окружность состоящую из 36 разноцветных квадратов Invisible Hunter Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2008 18:03